AJAX pose problème
Résolu
jlemonde
Messages postés
23
Statut
Membre
-
jlemonde Messages postés 23 Statut Membre -
jlemonde Messages postés 23 Statut Membre -
Salut,
J'ai un problème bizarre: j'ai un code qui marche prèsque correctement, mais lorsque j'appelle la fonction AJAX('file.txt'), une erreur surgit :
Pourtant le fichier file.txt est correctement retourné !
Voici mon code :
Vous arrivez à m'expliquer pourquoi cette erreur vient me perturber, et ce qu'il me faut changer dans mon code ?
J'ai un problème bizarre: j'ai un code qui marche prèsque correctement, mais lorsque j'appelle la fonction AJAX('file.txt'), une erreur surgit :
Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
Pourtant le fichier file.txt est correctement retourné !
Voici mon code :
function getXMLHttpRequest(){ var xhr = null; if(window.XMLHttpRequest || window.ActiveXObject){ if(window.ActiveXObject){ try{ xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e){ xhr = new ActiveXObject('Microsoft.XMLHTTP'); } } else{ xhr = new XMLHttpRequest(); } } else{ alert('Votre navigateur ne supporte pas l\'objet XMLHttpRequest...'); return null; } return xhr; } 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; } } xhr.open('GET', file, false); xhr.send(null); return AJAXMemory; } // UTILISATION : mondiv.innerHTML = AJAX("fichier.txt","alert('callBack')")
Vous arrivez à m'expliquer pourquoi cette erreur vient me perturber, et ce qu'il me faut changer dans mon code ?
A voir également:
- AJAX pose problème
- Dans un traitement de texte, à quoi s'applique la pose de taquets de tabulation sur la règle ? - Guide
- 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
- Poser une question ✓ - Forum Bases de données
- Erreur ajax ✓ - Forum Javascript
11 réponses
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 ...
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 questionvar 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; }
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.
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 ??
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);
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...
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