AJAX pose problème
Résolu/Fermé
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
-
3 janv. 2012 à 11:56
jlemonde Messages postés 21 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 12 avril 2013 - 4 janv. 2012 à 10:08
jlemonde Messages postés 21 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 12 avril 2013 - 4 janv. 2012 à 10:08
A voir également:
- AJAX pose problème
- Comment trouver l'application qui pose problème ? - Guide
- Dans un traitement de texte, à quoi s'applique la pose de taquets de tabulation sur la règle ? - Guide
- Erreur ajax ✓ - Forum Webmastering
- Andrew pose player - Forum Jeux PC
- Célia doit nettoyer le tableau ci-dessous pour l’ajouter à la base de données de son entreprise. les données sont ensuite traitées automatiquement. quelles sont les 4 cellules qui risquent de poser problème ? ✓ - Forum Excel
11 réponses
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
3 janv. 2012 à 23:43
3 janv. 2012 à 23:43
Le problème est créé par cette ligne :
Connaître le statut n'a pas vraiment d'intérêt lorsque la requête n'est pas terminée ...
AJAXMemory = 'Erreur ' + xhr.status;
Connaître le statut n'a pas vraiment d'intérêt lorsque la requête n'est pas terminée ...
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
3 janv. 2012 à 12:51
3 janv. 2012 à 12:51
Bonjour,
Sais-tu à quel moment précis dans la fonction AJAX il te renvoie cette erreur ?
Sais-tu à quel moment précis dans la fonction AJAX il te renvoie cette erreur ?
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
3 janv. 2012 à 13:20
3 janv. 2012 à 13:20
Non, pas tellement.
Je vais essayer de trouver...
Je vais essayer de trouver...
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
3 janv. 2012 à 13:27
3 janv. 2012 à 13:27
J'ai l'impression que c'est les fonction open() et send() car en les supprimant, il n'y a plus d'erreur. Mais évidement la fonction retourne undefined : elle ne fonctionne pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
3 janv. 2012 à 13:42
3 janv. 2012 à 13:42
Où est ton responseText ?
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
3 janv. 2012 à 13:54
3 janv. 2012 à 13:54
var AJAXMemory; function AJAX(file,callBack){ var xhr = getXMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { AJAXMemory = xhr.responseText; // Il est ici... eval(callBack); } else{ AJAXMemory = 'Erreur ' + xhr.status; } } xhr.open('GET', file, false); xhr.send(null); return AJAXMemory; }
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
3 janv. 2012 à 14:03
3 janv. 2012 à 14:03
Salut,
La fonction AJAX() ne retourne rien, elle ne fait qu'exécuté le callback.
Mais l'erreur ne provient pas de là.
Essaie en ajoutant quelques console.log() par-ci par-là.
Par exemple, au début du bloc « onreadystatechange » pour "loguer" les valeurs de xhr.status et xhr.readyState.
UTILISATION : mondiv.innerHTML = AJAX("fichier.txt","alert('callBack')")
La fonction AJAX() ne retourne rien, elle ne fait qu'exécuté le callback.
Mais l'erreur ne provient pas de là.
Essaie en ajoutant quelques console.log() par-ci par-là.
Par exemple, au début du bloc « onreadystatechange » pour "loguer" les valeurs de xhr.status et xhr.readyState.
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
3 janv. 2012 à 14:27
3 janv. 2012 à 14:27
Mais si, la fonction AJAX() retourne le contenu du fichier très bien.
À moins que tu n'aies pas mis la fonction « getXMLHttpRequest() »...
Tu dis qu'il faut loguer les valeurs de xhr.status et xhr.readyState, mais comment ??
À moins que tu n'aies pas mis la fonction « getXMLHttpRequest() »...
Tu dis qu'il faut loguer les valeurs de xhr.status et xhr.readyState, mais comment ??
Anoen
Messages postés
196
Date d'inscription
mardi 10 novembre 2009
Statut
Membre
Dernière intervention
11 septembre 2013
25
3 janv. 2012 à 14:31
3 janv. 2012 à 14:31
console.log(xhr.status);
console.log(xhr.readyState);
console.log(xhr.readyState);
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
3 janv. 2012 à 14:34
3 janv. 2012 à 14:34
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { AJAXMemory = xhr.responseText; // Il est ici... eval(callBack); }Je ne vois aucun retour (return) en cas de succès.
Tu ne peux donc pas faire « qlqchose = laFonction(); », sinon, qlqchose vaudra « undefined ».
AJAXMemory contient bien le résultat, et est accessible par le callBack, mais c'est tout.
Et en général, le callBack, c'est une fonction et non une chaine qu'on exécute avec eval().
Exemple :
function affichage(resultat) { alert('Résultat = ' + resultat); // ou div.innerHTML = resultat; } function AJAX(cible, callback) { // Traitement callback(xhr.responseText); } AJAX('fichier.txt', affichage);
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
Modifié par jlemonde le 3/01/2012 à 14:41
Modifié par jlemonde le 3/01/2012 à 14:41
oui d'accord, mais qu'est-ce qu'il faut que je regarde ??
console.log(xhr.status) retourne 200
console.log(xhr.readyState) retourne 4
le return se trouve quelques lignes plus bas.
D'abord je stocke le responseText dans une variable (AJAXMemory), et tout à la fin de la fonction AJAX(), je retourne la variable...
console.log(xhr.status) retourne 200
console.log(xhr.readyState) retourne 4
le return se trouve quelques lignes plus bas.
D'abord je stocke le responseText dans une variable (AJAXMemory), et tout à la fin de la fonction AJAX(), je retourne la variable...
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
3 janv. 2012 à 14:42
3 janv. 2012 à 14:42
Je n'avais pas vu le « return AJAXMemory; » à la fin.
Mais il est mal placé, le return sera exécuté bien avant la fin de la requête XHR.
Mais il est mal placé, le return sera exécuté bien avant la fin de la requête XHR.
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
Modifié par jlemonde le 3/01/2012 à 14:50
Modifié par jlemonde le 3/01/2012 à 14:50
C'est pourquoi j'ai décidé de faire fonctionner AJAX de manière syncrone :
xhr.open('GET', file, false);
c'est à dire que le script attend la fin de la requete avant de continuer.
xhr.open('GET', file, false);
c'est à dire que le script attend la fin de la requete avant de continuer.
avion-f16
Messages postés
19249
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
15 juin 2024
4 505
3 janv. 2012 à 17:20
3 janv. 2012 à 17:20
Pourrais-tu mettre le code en ligne ?
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
3 janv. 2012 à 20:50
3 janv. 2012 à 20:50
Je n'ai pas de vrai serveur en ligne... Je n'ai qu'esayPHP...
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
Modifié par Alain_42 le 3/01/2012 à 22:58
Modifié par Alain_42 le 3/01/2012 à 22:58
et comme ça:
et tu lances l'appel de la fonction AJAX (..
sur un événement
var AJAXMemory; function AJAX(file,callBack){ var xhr = getXMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { AJAXMemory = xhr.responseText; eval(callBack); } else{ AJAXMemory = 'Erreur ' + xhr.status; } document.getElementById('id_de_mondiv').innerHTML = AJAXMemory; // } xhr.open('GET', file, false); xhr.send(null); }
et tu lances l'appel de la fonction AJAX (..
sur un événement
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
4 janv. 2012 à 10:08
4 janv. 2012 à 10:08
Je veux une fonction qui me permette de retourner la contenu du fichier. Ta methode ne permet pas de faire ceci :
if(AJAX('file.txt') == 'exemple'){maFonction();}
jlemonde
Messages postés
21
Date d'inscription
dimanche 26 décembre 2010
Statut
Membre
Dernière intervention
12 avril 2013
4 janv. 2012 à 10:04
4 janv. 2012 à 10:04
Merci avion-f16 !!
En modifiant AJAXMemory = 'Erreur ' + xhr.status; par AJAXMemory = 'Erreur ';, il n'y a plus d'erreur...
Mais pourquoi demander un xhr.status revoit-t-il une erreur ??
En modifiant AJAXMemory = 'Erreur ' + xhr.status; par AJAXMemory = 'Erreur ';, il n'y a plus d'erreur...
Mais pourquoi demander un xhr.status revoit-t-il une erreur ??