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

AJAX Discussion :

[AJAX] Erreur nsIXMLHttpRequest.status 0x80040111 (NS_ERROR_NOT_AVAILABLE)


Sujet :

AJAX

  1. #1
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut [AJAX] Erreur nsIXMLHttpRequest.status 0x80040111 (NS_ERROR_NOT_AVAILABLE)
    Bonjour !

    Après une recherche sur le forum et sur Google, je me résous à vous soumettre mon problème.

    J'essaie de mettre au point une fonction JS permettant la mise à jour d'une liste d'un formulaire A à partir de données saisies dans le formulaire B d'une autre fenêtre F2.
    Lorsque le formulaire B est validé, la fenêtre F2 est fermée en appelant une fonction de mise à jour dans la première fenêtre (F1), retrouverEntree().

    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
     
    function retrouverEntree(ClefTable) {
    	// Initialisation XHR et parametres d'appels
    	var xhr = initialiserXMLHTTP();
    	var xhr_params = "clef=" + ClefTable;
     
    	// Definition appel fonction sur changement etat XHR
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4) {
    			switch (xhr.status) {
    				case 200:
    					var docXML = cleanXML(xhr.responseXML.documentElement);
    					var Entree = docXML.getElementsByTagName("entree")[0];
    					majListe(ClefTable,Entree.getElementsByTagName("texte")[0].firstChild.nodeValue,Entree.getElementsByTagName("valeur")[0].firstChild.nodeValue);
    					break;
    				case 400:
    				case 500:
    					alert("Une erreur technique s'est produite. Merci de renouveler l'opération ultérieurement");
    					break;
    				default:
    					alert("Erreur lors de l'enregistrement. Merci de renouveler l'opération ultérieurement.");
    			}
    		}
    	};
     
    	// Envoi donnees vers serveur
    	xhr.open("POST", "retrouver_entree.php", true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send(xhr_params);
    }
    Cet appel à la fonction retrouverEntree() fonctionne très bien, le script PHP qu'elle appelle est bien exécuté (vérifié dans les logs), mais la fonction en elle-même plante sur l'appel xhr.status. avec l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Erreur*: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://localhost/Bibliotheque/Bin/fonctions_java.js :: anonymous :: line 169"  data: no]
    Par ailleurs, le script PHP appelé seul dans un navigateur fonctionne bien également et me renvoie un fichier XML correctement constitué.

    Du coup, je ne comprends pas d'où provient mon erreur (si erreur il y a), d'autant que je me suis beaucoup inspiré des tutoriels du site pour construire ma fonction JS.
    Quelqu'un aurait-il une explication, et encore mieux, une solution ?

  2. #2
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Bon, personne n'a d'idée ? Même une idée ?
    Ca n'arrive qu'à moi ce genre de "bug" ?

  3. #3
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    En continuant mes recherches et expérimentations, j'ai constaté que j'avais d'autres fonctions similaires, mais qui ne récupèrent pas de données, et qui fonctionnent sans problème.
    Par ailleurs, un petit alert(xhr.responseXML) juste après le test if (xhr.readyState == 4) me montre que responseXML est null.

  4. #4
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Je progresse dans la résolution. La fonction retrouverEntree() est incluse dans une autre fonction, mettre_a_jour(). Si elle est appelée par la fenêtre F2au moment de sa fermeture (avec un window.opener.mettre_a_jour()), ça ne marche pas. En revanche, appelée après fermeture de F2 via un bouton dans F1, ça fonctionne.

  5. #5
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Bon, je suis un peu tout seul sur cette discussion (), mais compte tenu de ce qui précède, quelqu'un serait-il en mesure de m'expliquer la différence de contexte entre l'exécution d'une fonction appelée depuis la fenêtre où elle est définie et son appel depuis une autre fenêtre ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut épineux
    'alut,

    En fait, tu suggères carrément la solution: le pb vient sûrement de ce que le contexte d'exécution de ton XHR disparaît lorsque tu fermes F2.

    Donc, il me semble que tu devrais coder
    xhr.open("POST", "retrouver_entree.php", false);
    àld
    xhr.open("POST", "retrouver_entree.php", true);

    Ainsi, ta fermeture de fenêtre attendra bien sagement la fin de ton XHR avant de se fermer.

    Conseil gratos, pas le tps de tester... mais j'y crois fort !

    Bonne chance

  7. #7
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Ce qui est surprenant, alexag, c'est que ta solution ne fonctionne pas, mais je n'ai plus mon erreur.

    En revanche, si, dans ma fenêtre F2, je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	window.opener.mettre_a_jour('Lan_ID');
    	window.opener.focus();
    	window.close();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	window.opener.mettre_a_jour('Lan_ID');
    	window.opener.focus();
    	window.setTimeout("window.close()",500);
    là ça fonctionne ; F1 est bien mise à jour avec les paramètres introduits dans F2.

  8. #8
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    A la réflexion, ce qui est ennuyeux avec la temporisation, c'est que ça ne tient pas compte de l'état du réseau. En local, pas trop de souci, mais via Internet, pour peu qu'il y ait de la congestion, ça risque de planter comme avant.
    J'ai bien essayé de placer le close() dans F1, à la fin de la fonction mettre_a_jour(), mais ça ne fonctionne pas. Manifestement F2 est fermée trop tôt, que ce soit en mode synchrone ou asynchrone.

  9. #9
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Toujours dans F1, j'ai déplacé le close() de F2 dans la fonction onreadystatechange(), pour être sûr que F2 n'est fermée qu'une fois les modifications prises en compte dans F1. Le petit souci c'est qu'il faut que je clique dans F2 pour qu'elle se ferme vraiment.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 13
    Par défaut un an plus tard...
    j'ai le même problème j'appelle une fonction depuis une autre et l'erreur apparait parfois (pas tout le temps...pénible) quelqu'un a la solution???

  11. #11
    Membre éclairé Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Par défaut
    Dans mon cas, j'ai trouvé une solution de contournement. Pour rappel il s'agissait d'ajouter une entrée à une liste dans une fenêtre F1, entrée qui devait être définie via une autre fenêtre F2 ouverte pour l'occasion. Du coup, plutôt que d'interroger ma base de données pour y récupérer les informations à ajouter à ma liste, je les transfert directement entre fenêtres (donc en local).
    Plus précisément, lorsque je valide la nouvelle entrée dans F2 via le bouton du formulaire, un script PHP est appelé pour procéder à l'enregistrement dans la base de données. Normal. Au passage ce script récupère l'identifiant de la nouvelle entrée (clef de table autoincrémentée dans mon cas) et génère une nouvelle page Web (pratique pour signaler à l'utilisateur d'éventuelles erreurs d'enregistrement). Si tout c'est bien passé lors de l'enregistrement de la nouvelle entrée, cette page se termine par un bout de Javascript qui appelle la fonction de mise à jour avec l'identifiant de liste à mettre à jour, la valeur et le texte de l'entrée à ajouter, puis ferme F2.

  12. #12
    Invité de passage
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 1
    Par défaut
    Bonjour,


    Je débute Avec Ajax et j'ai eu la même erreur que toi.

    J'ai effectué l'ouverture avec le dernier paramètre à false et ça passe chez moi.

    xhr.open("POST", "retrouver_entree.php", false);


    Mais comme je l'ai dis, je débute avec AJax et javascript donc je dis peut-être une bêtise.

    Si c'est le cas, je m'en excuse d'avance.

  13. #13
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Par défaut
    Bonjour,

    Merci aashur, ta solution fonctionne!
    Je débute en Ajax moi aussi, maintenant je vais pouvoir avancer.

    Par contre si une âme charitable pouvait expliquer le phénomène, je suis toute ouïe.

    Cdlt

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

Discussions similaires

  1. [AJAX] erreur Status 404
    Par ammouna24 dans le forum AJAX
    Réponses: 5
    Dernier message: 29/04/2009, 15h30
  2. [AJAX] nsIXMLHttpRequest.status error incomprehensible
    Par Shiftane dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/04/2007, 11h54
  3. Réponses: 2
    Dernier message: 07/01/2007, 13h22
  4. Erreur XMLHttpRequest.status - NS_ERROR_NOT_AVAILABLE
    Par eowene dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/12/2006, 11h32
  5. [AJAX] Erreur système : -1072896658 Code 0
    Par ericw78 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/02/2006, 20h55

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