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

JavaScript Discussion :

[AJAX] Erreur d'appel Ajax


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut [AJAX] Erreur d'appel Ajax
    Bonjour,

    J'ai développé une fonction
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /** Use XHR method to bring back what a script display
     * @param The Script URL 
     * @access Public */
    function asynchronousCall(url)
    {
    	var xhr = null;
    	if (window.XMLHttpRequest)
    	{
    	  xhr = new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject) 
    	{
     		try 
      		{ 
        		xhr = new ActiveXObject("Msxml2.XMLHTTP");
      		} 
      		catch (e) 
      		{
         		try 
         		{ 
            		xhr = new ActiveXObject("Microsoft.XMLHTTP");
         		} 
         		catch (e) 
         		{
           			window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
         		}
      		} 
    	}
    	xhr.onreadystatechange = function()
    	{
    		if (xhr.readyState==4)
    		{
    			if (xhr.status==200)
    			{
    				return xhr.responseXML;	
    			}
    		}
    	}
    	xhr.open("GET",url,true)
    	xhr.send(null);
    }
    mais voila lorsque je tente de réafficher le résulta de cette fonction (normallement ce que le return me fournis), j'ai le droit à un undefined
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ajax = asynchronousCall('./web-services/list-companies.php');
    	alert(ajax);
    ajax = undefined

    ma question est simple, pourquoi ?
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Tu travailles en mode Asynchrone, JE te conseillerais de faire un
    (à la place du return)
    comme ça, tu peux facilement situer ton problème.
    A mon avi, ta fonction (asynchronousCall) ne retourne rien. à vérifier.

  3. #3
    Membre expérimenté 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
    Points : 1 388
    Points
    1 388
    Par défaut
    A mon avi, ta fonction (asynchronousCall) ne retourne rien. à vérifier.
    C'est ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	xhr.onreadystatechange = function()
    	{
    		if (xhr.readyState==4)
    		{
    			if (xhr.status==200)
    			{
    				return xhr.responseXML;	
    			}
    		}
    	}
    Le return est dans la fonction interne définie sur le xhr.onreadystatechange, donc tu ne peux pas retourner de résultat à l'extérieur de ta fonction.

  4. #4
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    compirs

    javascript n'a pas le même fonctionnement que PHP (tu pe faire des return dans les fonctions, dans des boucles, dans des conditions ...)

    donc j'initalise une variable toReturn (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var toReturn = xhr.responseXML
    puis à la fin de mon code, je fais un
    EDIT : et bien non j'ai tout faux
    même si je déclare ma variable javascript censée récupérer le XML au début (je l'intialise à null), elle est tjrs null
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par sliderman Voir le message
    compirs

    javascript n'a pas le même fonctionnement que PHP (tu pe faire des return dans les fonctions, dans des boucles, dans des conditions ...)

    donc j'initalise une variable toReturn (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var toReturn = xhr.responseXML
    puis à la fin de mon code, je fais un
    EDIT : et bien non j'ai tout faux
    même si je déclare ma variable javascript censée récupérer le XML au début (je l'intialise à null), elle est tjrs null
    je crois que tu n'a pas encore compris le fonctionnement du truc.
    si tu veux vraiment récupérer la valeur de ton XML, il faut surement faire du synchrone
    et dans ce cas, ça devrait être bon.
    en gros (je ne sais pas si le 'get' supporte, mais le 'post' oui)
    et derrière, tu recupère directement ton mais quand ce n'est pas 'synchrone', tu ne sais pas en fait que la requête a été exécutée.

    C'est pour cela qu'on fait son tratirement dans la fonction 'handler'
    en gros quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xhr.onreadystatechange = function()
    	{
                   // blblallalala
     
    //alert('etc');
    //crer tes divs;
    //set ton_InnerHTML
    /etc ...
    	}
    Sachant seulement que ton Ajax fonctionne en 'asynchrone', le fonctionnement que tu décrit serait bien normal et heureusement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par THE Drog Voir le message
    je crois que tu n'a pas encore compris le fonctionnement du truc.
    si tu veux vraiment récupérer la valeur de ton XML, il faut surement faire du synchrone
    et dans ce cas, ça devrait être bon.
    en gros (je ne sais pas si le 'get' supporte, mais le 'post' oui)
    et derrière, tu recupère directement ton mais quand ce n'est pas 'synchrone', tu ne sais pas en fait que la requête a été exécutée.

    C'est pour cela qu'on fait son tratirement dans la fonction 'handler'
    en gros quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xhr.onreadystatechange = function()
    	{
                   // blblallalala
     
    //alert('etc');
    //crer tes divs;
    //set ton_InnerHTML
    /etc ...
    	}
    Sachant seulement que ton Ajax fonctionne en 'asynchrone', le fonctionnement que tu décrit serait bien normal et heureusement.
    je n'ai pas compris pourquoi tu me parle de 'synchrone'.
    En fait, ce que je veux faire c'est pas une fonction qui execute un apel XHR (pour un traitement), mais plutot une fonction qui execute un XR et me retour son responseXML (fonction générique)
    http://aldorande.miniville.fr/ind
    Fedora 8, eclipse 3.3 sur x86_64
    --------------
    Colorer votre code php

  7. #7
    Membre expérimenté 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
    Points : 1 388
    Points
    1 388
    Par défaut
    Comme dit plus haut, c'est impossible de faire un return, que tu sois en synchro ou en asynchro.

    J'avais donné une bidouille ici pour arriver à avoir un résultat sensiblement pareil, mais c'est vraiment à utiliser dans des cas particuliers...

Discussions similaires

  1. Erreur sur appel Ajax
    Par lenalg dans le forum AJAX
    Réponses: 3
    Dernier message: 03/04/2017, 14h06
  2. [AJAX] Appel Ajax dans un appel Ajax avec JS et PHP
    Par Gajilidd dans le forum AJAX
    Réponses: 10
    Dernier message: 27/08/2010, 12h36
  3. [AJAX] Requetes HTTPS et ajax = erreur 400?
    Par bambou dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/02/2007, 16h59
  4. [AJAX] Erreur 404 avec Ajax
    Par GuileIzback dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/01/2007, 11h58
  5. [AJAX] Effectuer plusieur appel ajax
    Par shwin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/10/2005, 16h40

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