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

JavaScript Discussion :

[AJAX] AJAX traiter la réponse du serveur


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut [AJAX] AJAX traiter la réponse du serveur
    bonjour,

    bon voilà je début sur AJAX ( l'objet xmlHTTPrequest plus précisement )

    voilà ce que j'aimerais faire :

    lorsque je click sur un bouton, une requete asynchrone est envoyée au serveur,

    le serveur retourne une reponse ( du code html donc ) et j'aimerais pouvoir récupérer des valeurs en javascript comme si la page était afficher ( c'est à dire : reponseDuServeur.getElementById('unId').value )

    alors voilà mon code javascript :
    -premiere fonction ( elle envoie la requete au serveur )

    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
     
     
    function requete(callback,url_)
    {
     
    	var xhr = getXMLHttpRequest(); // on récupere une instance de xmlHTTPrequest
     
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) 
    		{
    			callback(xhr.responseText); // appelle la fonction readData
    		}else console.log(xhr.readyState);
    	};
     
    	xhr.open("POST", url_, true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     
            xhr.send();
     
     
    }
     
    function readData(data_)
    {
    	var node= data_.getElementById('loginbox');
    	alert(node.value);
    }
    Donc comme vous vous en doutez, si je post c'est que ca marche pas..
    firebug renvoi :
    data_.getElementById is not a function
    [Break on this error] var node= data_.getElementById('loginbox');

    donc je me suis dis bon réflechissons : et je me suis dis que c'était normal car data_ était en fait un String et donc ca ne pouvais pas marcher, donc je me suis dis : il faut que je passe par xhr.responseXML,

    sauf qu'en faisant ça, l'objet xhr.responseXML est égal a null donc ca ne marche pas ...

    j'ai enfin eu une dernière idée, utiliser xhr.responseText et un ParserDOM qui analyse la chaine de caractere retourné par le serveur et la parse en HTML et place le resultat dans un objet, puis j'envoie ce fameux objet dans la fonction readData...

    donc voilà le code modifier :

    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
     
     
     
    function requete(callback,url_)
    {
    	var parserXML = new DOMParser();
     
    	var xhr = getXMLHttpRequest(); 
     
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) 
    		{
    			var xmlresponse = parserXML.parseFromString(xhr.responseText, "text/xml");
     
    			callback(xmlresponse);
    		}else console.log(xhr.readyState);
    	};
     
    	xhr.open("POST", url_, true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     
    	xhr.send();
     
    }
     
    function readData(data_)
    {
            console.log('dedan');
            console.log(data_);
    	var node= data_.getElementById('loginbox');
            console.log('test');
    	alert(node.value);
    }
    donc du coup dans firebug ( et oui sa ne marche toujours pas ^^ ) il m'affiche :

    dedan
    Document
    test
    node is null
    [Break on this error] console.log(node.value);

    et donc Document, qui correspond à la ligne ( console.log(data_); ) , et donc à l'affichage du résultat du Parser, indique lorsqu'on click dessus qu'il y a eu certaine erreur lors du "parssage" ...

    donc voilà je suis bloqué et je sais pas comment pouvoir manipuler la réponse du serveur pour arriver a mon objectif :
    pouvoir récupérer des valeurs en javascript comme si la page était afficher ( c'est à dire : reponseDuServeur.getElementById('unId').value )

    Merci de m'éclairer sur la facon de procéder, je précise que je suis débutant avec AJAX :p

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Tu peux faire voir comment tu appelles ta fonction readData?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Vue que j'avais pas de réponse à mon post, j'ai résolu le problème différement, donc pour faire concis et précis :

    si xhr.responseXML ne marchait pas c'est tout simplement car le serveur retournait un string et non un objet XML,

    si xhr.responseText + parserDOM ne marchait pas c'est tout simplement car j'avais du code non W3C valide ( du genre <input blabla > ( sans fermer la balise ) et donc du coup le parserDOM plantait.

    donc j'ai fait une page spécifique qui renvoyait un objet XML ( la requete ajax attaquait donc cette page ) et donc ensuite il fallait utiliser des fonctions differentes de getElementByID ou getElementsByName, il fallait utiliser getElementsByTagName et utiliser item[x].firstchild ou des truc du genre pour avoir accès au valeur de l'objet XML

    au final je trouvais la solution un peu lourde donc j'ai migré vers Json, donc actuellement le serveur retourne un objet Json , et grace à la methode eval de javascript, je n'ai plus aucun problème pour récupérer mes valeurs.

    si vous voulez plus de détail, pour des problèmes similaires, n'hésitez pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/11/2009, 17h17
  2. [MooTools] Traiter une réponse ajax XML avec Mootools
    Par dolu02 dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 24/12/2008, 16h58
  3. [AJAX] Traiter la réponse d'un JSP avec Javascript
    Par jepoirrier dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2008, 14h44
  4. [AJAX] AJAX et gestion des réponses serveur
    Par eolis dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/09/2007, 17h04
  5. [AJAX] Redirection après réponse du serveur
    Par acidline dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/08/2007, 14h51

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