IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] interroger serveur distant Ajax


Sujet :

AJAX

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut [AJAX] interroger serveur distant Ajax
    Bonjour,

    je souhaite interroger un serveur distant grace à ajax. je veux envoyer une phrase à un serveur distant et l'adresse pourrait ressembler à cela :
    http://129.134.39.49/Test

    ensuite le serveur distant devra afficher le resultat sous forme de xml.

    pour ma part je veux recuperer ce fichier xml et le traiter de mon coté.

    pouvez vous m'indiquer une marche a suivre et si c'est possible bien entendu

    merci

    ps : j'ai l'équivalent mais en php donc si je peux le faire en ajax ça m'arrangerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	if (!empty($_POST['in'])) {
    		$url = 'http://129.196.15.49/Test';
    		$contexte = stream_context_create(
    		array(
                    'http' => array(
                        'method' => 'POST',
                        'header' => "User-Agent: PHP5 & DOM/SimpleXML\r\nContent-type: application/x-www-form-urlencoded ",
                        'content' => http_build_query($_POST),
                        'max_redirects' => 2,
                        'timeout' => 5,
    		)
    		)
    		);
    		libxml_set_streams_context($contexte);
     
     
    		print_r ($sxml);
     
     
    	} else {
     
    		echo "PROBLEME AVEC LE XML!!";
    		// ...
    	}
    }

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut.

    L'AJAX cross domaine est encore loin d'être bien supporté (voir la Same Origin Policy).
    Le plus simple dans ton cas sera certainement d'appeler via une requête AJAX ton script PHP qui lui te renverra le XML que tu veux.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    merci pour la réponse.

    est ce que tu aurai un lien qui pourrait m'indiquer comment procéder?
    je suis un peu debutant en ajax

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    voila ce que j'ai pu pondre comme depart :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <form name="form1" id="form1" method="post"
    	action=""><select name="ap" id="ap" style="visibility:hidden;">
    	<option value="XMLTei" selected="selected" >XMLTei</option>
    </select> <select name="ln" id="ln" style="visibility:hidden;">
    	<option value="fr" selected="selected" >French</option>
    </select> <input name="in" id="status" value="Saisir la phrase ici"
    	type="text" /> <input value="Submit" type="submit" /></form>
    </div>
     
     
    <a href='xml/phraseTEI.xml'>PhraseTEI.xml</a>
    <br />
    <a href='xml/normTEI/FipsTEI_doc.html'>FipsTEI_doc.html</a>
     
     
     
     
     
     
     
     
     
    <div id='phrase'><!-- construction et validation de la phrase en HTML -->
     
    <script type="text/javascript">
    $(document).ready( function () { 
    	$("#form1").submit( function() {	// à la soumission du formulaire						 
    		$.ajax({ // fonction permettant de faire de l'ajax
    		   type: "POST", // methode de transmission des données au fichier php
    		   url: "request.php", // url du fichier php
    		   data: "ap="+$("#ap").val()+"&ln="+$("#ln").val()+"&in="+$("#status").val(), // données à transmettre
    		   success: function(msg){ // si l'appel a bien fonctionné
    				if(msg==1) // si la connexion en php a fonctionnée
    				{
    					$("div#phrase").html("<span id=\"confirmMsg\">Vous &ecirc;tes maintenant connect&eacute;.</span>");
    					// on désactive l'affichage du formulaire et on affiche un message de bienvenue à la place
    				}
    				else // si la connexion en php n'a pas fonctionnée
    				{
    					$("div#phrase").html("<img src=\"bomb.png\" style=\"float:left;\" />&nbsp;Erreur lors de la connexion, veuillez v&eacute;rifier votre login et votre mot de passe.");
    					// on affiche un message d'erreur dans le span prévu à cet effet
    				}
    		   }
    		});
    		return false; // permet de rester sur la même page à la soumission du formulaire
    	});
    });
     
    </script>
     
    </div>
    le code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
     
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	if (!empty($_POST['in'])) {
    		$url = 'http://129.194.19.89/Parser';
    		$contexte = stream_context_create(
    		array(
                    'http' => array(
                        'method' => 'POST',
                        'header' => "User-Agent: PHP5 & DOM/SimpleXML\r\nContent-type: application/x-www-form-urlencoded ",
                        'content' => http_build_query($_POST),
                        'max_redirects' => 2,
                        'timeout' => 5,
    		)
    		)
    		);
    		libxml_set_streams_context($contexte);
     
     
    		$sxml = simplexml_load_file($url); // Il faudrait tester que $sxml ne vaut pas FALSE ici s'il y a erreur
     
     
    		//print_r ($sxml);
     
     
    		//transformation du xml avec la xsl correspondante
    		$xslDoc = new DOMDocument();
    		$xslDoc->load("xslt/transformHTML.xsl");
     
    		$xmlDoc = new DOMDocument();
    		$xmlDoc->load($url);
     
    		//afficher fichier xml
    		//echo $xmlDoc->saveXML();
     
    		// Sauver le document XML sous le nom simple.xml
     		//$xmlDoc->save('simple.xml');
     
    		$proc = new XSLTProcessor();
    		$proc->importStylesheet($xslDoc);
     
    		echo $proc->transformToXML($xmlDoc);
     
     
    	} else {
     
    		echo "PROBLEME AVEC LE XML!!";
    		// ...
    	}
    }
    ?>
    ça ne fonctionne pas pour le moment

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ben... ton PHP ne te renvoie jamais '1' (et au passage encore moins 1)

    Ensuite, ton but est de récupérer un XML, il faut donc le préciser à ton script (c'est jQuery, n'est-ce pas ?)
    Et le préciser dans ta réponse PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-type: text/xml');
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    oui c'est du jquery alors voila mes corrections :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <script type="text/javascript">
    $(document).ready( function () { 
    	$("#form1").submit( function() {	// à la soumission du formulaire						 
    		$.ajax({ // fonction permettant de faire de l'ajax
    		   type: "POST", // methode de transmission des données au fichier php
    		   url: "request.php", // url du fichier php
    		   dataType: 'xml',
    		   data: "ap="+$("#ap").val()+"&ln="+$("#ln").val()+"&in="+$("#status").val(), // données à transmettre
    		   success: function(msg){ // si l'appel a bien fonctionné
    				if(msg==1) // si la connexion en php a fonctionnée
    				{
    					$("div#phrase").html("<span id=\"confirmMsg\">Vous &ecirc;tes maintenant connect&eacute;.</span>");
    					// on désactive l'affichage du formulaire et on affiche un message de bienvenue à la place
    				}
    				else // si la connexion en php n'a pas fonctionnée
    				{
    					$("div#phrase").html("<img src=\"bomb.png\" style=\"float:left;\" />&nbsp;Erreur lors de la connexion.");
    					// on affiche un message d'erreur dans le span prévu à cet effet
    				}
    		   }
    		});
    		return false; // permet de rester sur la même page à la soumission du formulaire
    	});
    });
     
    </script>
    pour le php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	if (!empty($_POST['in'])) {
    		$url = 'http://129.194.19.89/Parser';
    		$contexte = stream_context_create(
    		array(
                    'http' => array(
                        'method' => 'post',
    					//'header' => "Content-type: text/xml",
                        'header' => "User-Agent: PHP5 & DOM/SimpleXML\r\nContent-type: application/x-www-form-urlencoded ",
                        'content' => http_build_query($_POST),
                        'max_redirects' => 2,
                        'timeout' => 5,
    		)
    		)
    		);
    		libxml_set_streams_context($contexte);
    		echo "1";
     
    		$sxml = simplexml_load_file($url); // Il faudrait tester que $sxml ne vaut pas FALSE ici s'il y a erreur
     
     
    		//print_r ($sxml);
     
     
    		//transformation du xml avec la xsl correspondante
    		$xslDoc = new DOMDocument();
    		$xslDoc->load("xslt/transformHTML.xsl");
     
    		$xmlDoc = new DOMDocument();
    		$xmlDoc->load($url);
     
    		//afficher fichier xml
    		//echo $xmlDoc->saveXML();
     
    		// Sauver le document XML sous le nom simple.xml
     		//$xmlDoc->save('simple.xml');
     
    		$proc = new XSLTProcessor();
    		$proc->importStylesheet($xslDoc);
     
    		echo $proc->transformToXML($xmlDoc);
     
     
    	} else {
    		echo "0";
    		echo "PROBLEME AVEC LE XML!!";
    		// ...
    	}
    }
    ?>
    j'ai un soucis sa ne fonctionne pas; je vois pas trop ou mettre mon header dans le php et pour le datatype je l'ai mi mais j'ai l'impression qu'il pose probleme.

    c'est sans doute un petit detail qui pose soucis...

    merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    j'ai un premier resultat puisque j'ai le message correct; le script recoit donc bien le 1 du php.
    par contre je n'arrive pas a recuperer mon xml. j'ai l'impression que les donnees n'existe pas.

    voici mon code ajax jquery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <script type="text/javascript">
    $(document).ready( function () { 
    	$("#form1").submit( function() {	// à la soumission du formulaire						 
    		$.ajax({ 
    			// fonction permettant de faire de l'ajax
    		   type: "POST", // methode de transmission des données au fichier php
    		   url: "request.php", // url du fichier php
    		   dataType:  "text",
    		   data: "ap="+$("#ap").val()+"&ln="+$("#ln").val()+"&in="+$("#status").val(), // données à transmettre
    		   success: function(msg){ // si l'appel a bien fonctionné
    				if(msg==1) // si la connexion en php a fonctionnée
    				{
    					// on désactive l'affichage du formulaire et on affiche un message de bienvenue à la place
    					//$("div#phrase").html("<span id=\"confirmMsg\">Vous &ecirc;tes maintenant connect&eacute;.</span>");
    					$("div#phrase").empty(); // on vide le div
    					$("div#phrase").append(data); // on met dans le div le résultat de la requete ajax
     
     
     
    				}
    				else // si la connexion en php n'a pas fonctionnée
    				{
    					$("div#phrase").html("<img src=\"bomb.png\" style=\"float:left;\" />&nbsp;Erreur lors de la connexion.");
    					// on affiche un message d'erreur dans le span prévu à cet effet
    				}
    		   }
    		});
    		return false; // permet de rester sur la même page à la soumission du formulaire
    	});
    });
     
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
     
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	if (!empty($_POST['in'])) {
    		$url = 'http://129.194.19.89/Parser';
    		$contexte = stream_context_create(
    		array(
                    'http' => array(
                        'method' => 'post',
                        'header' => "User-Agent: PHP5 & DOM/SimpleXML\r\nContent-type: application/x-www-form-urlencoded ",
                        'content' => http_build_query($_POST),
                        'max_redirects' => 2,
                        'timeout' => 5,
    		)
    		)
    		);
    		libxml_set_streams_context($contexte);
    		echo "1";
    		header('Content-type: text/xml');
    		$sxml = simplexml_load_file($url); // Il faudrait tester que $sxml ne vaut pas FALSE ici s'il y a erreur
     
     
    		//print_r ($sxml);
     
     
    		//transformation du xml avec la xsl correspondante
    		$xslDoc = new DOMDocument();
    		$xslDoc->load("xslt/transformHTML.xsl");
     
    		$xmlDoc = new DOMDocument();
    		$xmlDoc->load($url);
     
    		//afficher fichier xml
    		//echo $xmlDoc->saveXML();
     
    		// Sauver le document XML sous le nom simple.xml
     		//$xmlDoc->save('simple.xml');
     
    		$proc = new XSLTProcessor();
    		$proc->importStylesheet($xslDoc);
     
    		echo $proc->transformToXML($xmlDoc);
     
     
    	} else {
    		echo "0";
    		echo "PROBLEME AVEC LE XML!!";
    		// ...
    	}
    }
    ?>
    ps : j'ai un soucis avec le dataType dans le code jquery; si je met xml il n'y a plus de message. sans cette ligne ou en mettant une autre valeur il m'affiche bien le message.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Déjà, il faut savoir ce que doit renvoyer ton script
    Tu mélanges allègrement du texte :
    puis du XML :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $proc->transformToXML($xmlDoc);
    Ce qui ne pourra jamais donner un résultat exploitable avec responseXML.

    Ensuite, le header, c'est au tout début du script qu'il faut le mettre !
    C'est pas une fois que tu as commencé à créer ta réponse qu'il faut dire à PHP "au fait, tu vas rire mais j'ai oublié de te prévenir que ce que tu envoies, c'est du XML".

    Enfin, commence par vérifier si transformToXML ne te renvoie pas false...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Par défaut
    merci pour ton aide bovino

    alors j'y suis presque enfin j'espere je crois voir d'où vient le soucis.

    en fait ma variable :

    qui vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_load_file($url);
    renvoit false au lieu de true.

    le soucis vient donc de la requete vers le serveur et de la bonne reception du xml.

    que dois-je modifier d'apres toi dans le php?

  10. #10
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    J'ai du mal à saisir la logique de ton code

    Tu charges deux fois le même fichier dans ton code... Et je pense que la ligne du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_load_file($url);
    ne sert à rien, vu qu'elle n'est pas utilisée...

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/02/2015, 12h17
  2. Réponses: 2
    Dernier message: 12/11/2009, 10h55
  3. [AJAX] Requette sur serveur distant
    Par patricklinden dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/12/2007, 02h13
  4. [Prototype] AJAX et les serveurs distants
    Par webrider dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 01/08/2007, 16h48
  5. AJAX : Fonctionne en local mais pas sur serveur distant ?
    Par jejefeds dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/06/2007, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo