JeuWeb - Crée ton jeu par navigateur
[Résolu][jQuery] Un responseText vide qui n'est pes censé l'être ! - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu][jQuery] Un responseText vide qui n'est pes censé l'être ! (/showthread.php?tid=2548)



[Résolu][jQuery] Un responseText vide qui n'est pes censé l'être ! - Sephi-Chan - 12-04-2008

Salut tout le monde. Smile

Je viens demander de l'aide au sujet de jQuery. Je suis en effet en train de faire quelques essais d'Ajax (autrement qu'avec les méthodes "simples" et je fais face à un problème.

Code PHP :
<?php 
$('a').click(function(){
var
loaded_html = $.ajax({
url : $(this).attr('href')
});
alert(loaded_html.responseText);
return
false;
});

La propriété loaded_html.responseText est vide, alors que Firebug l'indique comme contenant ce qu'elle devrait contenir, à savoir le code source de la page appelée.

C'est très troublant car je n'ai jamais eu ce problème alors que j'ai déjà fais de l'Ajax avec jQuery à plusieurs reprises sans jamais rencontrer ce problème.

Et le pire, c'est qu'en utilisant le code qui suit, le contenu de la page appelante est bien remplacé par celui la page appelée.
Code PHP :
<?php 
$('body').load($(this).attr('href'))

Quelqu'un saurait-il ce qu'il se passe ? Car cette bizarrerie me troue le…


Sephi-Chan


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - Harparine - 12-04-2008

Tu as essayé d'afficher loaded_html.responseText dans une div vide plutôt que via un alert ? Tu saurais si c'est l'affichage avec alert qui bugue...


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - Sephi-Chan - 12-04-2008

Oui j'ai essayé les différents moyens d'afficher.
J'ai une piste de solution (sans en avoir pour l'explication).

Code PHP :
<?php 
$('a').click(function(){
$.
ajax({
url : $(this).attr('href'),
success : function(returned_data){
alert(returned_data);
}
});
return
false;
});

La propriété responseText est donc retourné par la fonction appelée sur l'événement success. Cette façon de faire avec est assez obscure pour moi.

Le problème est donc résolu mais si un gourou de jQuery sait pourquoi responseText n'est pas utilisable de base, je serais tout ouïe. Smile


Sephi-Chan


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - NicoMSEvent - 13-04-2008

[code:javascript]
$('a').click(function(){
var loaded_html = $.ajax({
url : $(this).attr('href')
}); //ici tu lance le chargement ajax
alert(loaded_html.responseText); //juste après (il n'a pas encore eu le temps de retourner le résultat de ta requete) tu essaie d'afficher le résultat de ta requete.
return false;
});


$('a').click(function(){
$.ajax({
url : $(this).attr('href'),
success : function(returned_data){ // ici, dès que le résultat de la requete est prêt
alert(returned_data); //tu affiche ce résultat
}
});
return false;
});
[/code]

La programmation événementielle, c'est une autre manière de penser que le procédural Wink


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - naholyr - 13-04-2008

Ce n'est pas spécialement le fait que ce soit évènementiel, c'est surtout que c'est un appel asynchrone. Quand tu appelles $.ajax() en mode "asynchrone" (par défaut), il n'attend pas que la réponse ait été reçu pour rendre la main.
Ce que tu voulais faire aurait fonctionné avec un appel en mode "synchrone".

Voir la page http://docs.jquery.com/Ajax/jQuery.ajax l'onglet "Options", tu vois qu'il y a l'option "async" que tu dois mettre à false pour faire du synchrone.

Mais de toute façon, même en mode synchrone il vaut mieux mettre ta fonction de traitement de resultat dans "success" ou dans "error" car sinon tu n'auras tout simplement pas de traitement d'erreur Wink


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - Sephi-Chan - 13-04-2008

Ça ne m'intéresse pas de faire du synchrone, je perds l'intérêt de la chose en bloquant le navigateur.

Je pense donc que le problème ne vient pas de là puisque Firebug me sort le résultat que j'attends. En utilisant :
Code PHP :
<?php 
$('a').click(function(){
$.
ajax({
url : $(this).attr('href'),
success : function(returned_data){
alert(returned_data);
}
});
return
false;
});
Ça marche bien.

Ce qui m'intrigue, c'est juste la différence entre l'affichage et le résultat donné par Firebug pour responseText.


Sephi-Chan


RE: [jQuery] Un responseText vide qui n'est pes censé l'être ! - naholyr - 13-04-2008

Il y a un léger délai qui s'est passé quand firebug t'affiche la valeur, ce délai est suffisant pour que la variable ait été correctement remplie, tout simplement.
En effet il affiche les valeurs des variables en temps réel, le temps que tu déplaces ta souris sur le nom de variable la page demandée par l'appel Ajax a répondu et le responseText n'est donc plus vide.