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

jQuery Discussion :

[JQuery] Récupération de réponse serveur morcelée


Sujet :

jQuery

  1. #1
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut [JQuery] Récupération de réponse serveur morcelée
    Bonjour à tous.

    Je suis tout nouveau ici, alors j'espère ne pas faire de bourdes en postant ici.

    Mon problème : j'ai une application client-serveur (JSP/Servlets). Je planche actuellement sur une fonctionnalité de recherche. L'utilisateur saisie une chaîne de caractères et valide, puis une fonction AJAX s'occupe d'envoyer celle-ci 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
     
    $.ajax({
            type: "POST",
    	url: "gestStages",
    	data: "ajax=yes&recherche=" + $("#recherche").val(),
    	dataType: "xml",
    	success: function(xml){
    		$(xml).find("stage").each(function(){
    			$("#tableRecherche").append("<tr></tr>") ;
    			$(this).children().each(function(){
    				$("#tableRecherche tr:last-child").append("<td>" + $(this).text() + "</td>") ;
    			});
    		});
    	} 
    });
    Je récupère donc ici un document XML, que je parse dans la clause success, à l'aide de la librairie JQuery. Si ce document fait moins de 200 lignes, tout va bien. Mais j'ai des requêtes qui retournent plus de 1000 lignes, et selon Firebug, la "response" est "chunked" (Transfert-encoding). Dans cet unique cas, c'est comme si je recevais un fichier XML vide, alors que dans la fenêtre de FB, il m'est possible de visualiser ce même document, au complet.

    Cela veut bien dire qu'il a fait tout le chemin pour arriver à bon port. C'est donc un problème de lecture, mais, au bout de deux journées sans avancer, je m'en remet à vous.

    En espérant avoir été le plus clair possible.
    Par avance, merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Bonjour,

    Je reviens avec un peu plus de précisions, car je vois que personnes n'est inspiré. J'ai fais des tests supplémentaires, et modifié ma fonction AJAX en rajoutant ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    error: function(XMLHttpRequest, textStatus, errorThrown){
    	alert(XMLHttpRequest);
    	alert(textStatus);
    	alert(errorThrown);
    }
    Cette fonction me fait donc apparaître le message d'erreur "parsererror" pour le textStatus. Ce que je ne comprend pas, c'est que dans Firebug, mon document est bel et bien formé. Cette erreur n'a donc pas lieu d'être...

    Sinon, la piste sur laquelle j'étais parti (découpage de la réponse HTTP) n'a pas l'air d'être le problème principal, car parmi les petites requêtes qui marchent, certaines sont justement morcelées.

    Merci à vous

  3. #3
    Membre Expert 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
    Par défaut
    Si tu récupères ta réponse en format text et non xml, elle est bien complète ou pas?

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Bonjour à toi !

    J'ai justement essayé de déclarer du text et non de l'xml, et la, la récupération apparemment tournerait bien pour les, disons, 300 premières lignes, puis plante en me disant qu'un script ne répond pas ou est peut-être arrêté. Trois boutons s'offrent à moi, ignorer, arrêter, et debogger.

    Donc voilà, y'a du mieux, mais c'est pas encore ça. Pour tout avouer, je commence à désespérer et me dire après des heures entières passées sur Google à chercher et rechercher qu'il n'y a pas forcément de solution oO

    Merci beaucoup pour ta suggestion en tout cas

  5. #5
    Membre Expert 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
    Par défaut
    C'est quand même pas normal que tu puisses pas faire une requete qui te retourne tous tes résutats... T'as essayé de faire la requête à la main, sans passer par ton framework? (jQuery?)

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Qu'entends-tu par faire une requête à la main sans passer par le framework? Genre je la fais dans MySQL QB?

  7. #7
    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 : 55
    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
    Je pense que tu devrais aussi régler le Content-Length avec setRequestHeader si ta réponse est trop volumineuse...
    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

  8. #8
    Membre Expert 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
    Par défaut
    Nan, je voulais dire écrire toute la requete (crééer le XMLHttpRequest, faire le onreadystatechange, etc...), ne pas passer par ta fonction $.Ajax.

  9. #9
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Ah oui pardon !

    Et bien, je l'ai fait comme ça au début Alors quand j'ai vu que cela ne marchait pas, je me suis dit : On va essayer avec JQuery ! (surtout que je maîtrise mieux)

    Et là, ça marchait pas non plus (mais comme l'impression que ça allait plus vite oO...bizarre)

  10. #10
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Je pense que tu devrais aussi régler le Content-Length avec setRequestHeader si ta réponse est trop volumineuse...
    Comme ça ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setContentLength(xxx);
    dans la servlet?

  11. #11
    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 : 55
    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
    Je pense qu'il faut modifier le ContentLength dans l'envoi HTTP coté serveur qui doit être fixé par défaut et te renvoie un résultat morcelé si le contenu est plus grand.

    Désolé pour mon précédent post, setRequestHeader n'agit que sur l'envoi (donc inutile ici) quant à la réponse, tu ne peux que récupérer le ResponseHeader (getResponseHeader).

    Tu peux facilement vérifier si le problème vient de là avec Firebug sous FF qui te montre les éléments du getResponseHeader de la requête Ajax. Si la valeur est inférieure à la taille du résultat attendu.
    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

  12. #12
    Membre Expert 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
    Par défaut
    J'ai justement essayé de déclarer du text et non de l'xml, et la, la récupération apparemment tournerait bien pour les, disons, 300 premières lignes, puis plante en me disant qu'un script ne répond pas ou est peut-être arrêté. Trois boutons s'offrent à moi, ignorer, arrêter, et debogger.
    T'as essayé avec un autre navigateur. Néanmoins, s'il te met ca, c'est ptete que ton traitement est trop long.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		$(xml).find("stage").each(function(){
    			$("#tableRecherche").append("<tr></tr>") ;
    			$(this).children().each(function(){
    				$("#tableRecherche tr:last-child").append("<td>" + $(this).text() + "</td>") ;
    			});
    		});
    Essaie de remplacer les fonctions jQuery par du code plus natif (genre des for pour remplacer les each, bref, tout ce qui pourrait réduire ton temps de traitement).

    Edit: dans about:config, essaie d'augmenter la clé dom.max_script_run_time pour augmenter le timeout de tes scripts

  13. #13
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    DoubleU, merci de tes conseils, j'essayerais cette après-midi. Mais une question : AJAX, on l'utilise justement pour envoyer de l'XML non? Alors pourquoi réceptionner du texte? oO

  14. #14
    Membre Expert 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
    Par défaut
    En fait, j'avais eu un problème un peu similaire au tien, c'est à dire que quand je reçevais des très grosses réponses XML, sous IE, le parseur n'arrivait pas a créer le XML et donc il plantait, renvoyant un erreur au lieu du responseXML, alors que le responseText était bien complet.

    Pour résoudre ca, j'avais créé l'arbre XML à partir de la responseText en utilisant l'objet DOMParser et ca avait réglé le problème, donc je me disais que ca aurait pu etre la même chose pour toi.

  15. #15
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Ok je vois, mais quand je passe en mode texte, je n'ai apparemment pas besoin de reconstruire l'arbre, mon algo fonctionne quand même et génère les résultats que j'attends. Sauf qu'il ne plante pas comme avec l'xml, d'abord il rame, puis il plante ...

  16. #16
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Par défaut
    Bon, j'ai trouvé une solution qui règle une bonne fois pour toute le problème. J'oblige l'utilisateur, sur conseil de mon maître de stage, à préciser sa recherche dans le cas ou elle retourne trop de résultats.
    Désolé pour ceux qui attendaient une réponse, mais même sur les autres forums et Google & Co, le sujet se fait rare.

    Merci beaucoup à vous pour m'avoir aidé et vous être creusé la tête.

    Bon courage à tous !

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

Discussions similaires

  1. Récupération de donnée serveur local et distant
    Par sebaaas dans le forum Langage
    Réponses: 1
    Dernier message: 05/12/2007, 00h51
  2. [TCP IP] Demande-réponse serveur
    Par klimasDavid dans le forum Web & réseau
    Réponses: 2
    Dernier message: 19/11/2007, 22h47
  3. [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, 18h04
  4. XMLHTTP : réponse serveur
    Par Tsukaniki dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2007, 03h31
  5. [XML] [XML-RPC] retrouver les infos d'une réponse serveur
    Par arnolem dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/08/2006, 13h07

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