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 :

retour d'ajax


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Par défaut retour d'ajax
    Bonjour à tous,

    Je suis entrain de créé une application en Ajax et j'ai créer ce code qui fonctionne à moitié, c'est pour ça que je viens vous demander conseil :
    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
    42
     
    manager = {
    	objXMLHttpRequest : null,
     
    	get : function(setting) {
    		objXMLHttpRequest = manager.requestObject();
     
    		if(typeof(setting.mode) == 'undefined' || setting.mode != true || setting.mode != false) {
    			setting.mode = true;
    		}
     
    		if(typeof(setting.json) == 'undefined') {
    			manager.json = false;
    		} else {
    			manager.json = setting.json;
    		}
     
    		objXMLHttpRequest.open('GET', setting.url, setting.mode);
     
    		objXMLHttpRequest.onreadystatechange = function() {manager.response(setting.callBack)};
     
    		objXMLHttpRequest.send(null);
    	},
     
    	response : function(callBack) {
    		if(objXMLHttpRequest.readyState == 4) {
    			if(objXMLHttpRequest.status == 200) {
    				var response = objXMLHttpRequest.responseText;
     
    				if(typeof(manager.json) != 'undefined' && manager.json === true) {
    					response = window["eval"]("(" + response + ")");
    				}
     
    				callBack(response)
    			}
    		}
    	},
     
    	requestObject : function() {
    		return window.XMLHttpRequest ? new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
    	},
    };
    Grâce à cette classe, je peux effectuer le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    window.onload = function() {
    	var value = manager.get({
    					url : 'http://www.url.com/index.php?params=test',
    					json : true,
    					callBack : function(data) {
    						return data.script;
    					},
    				});
     
    	alert(value)
    }
    Le souci dans ce code, c'est que je fait un retrour de la ligne suivante :

    Que je mets dans la variable "value" mais l'alert ne m'affiche rien (enfin si : undefined). Par contre, il y a bien un texte de retour si vous vous poser la question car lorsque je fait :

    ou

    Dans la méthode "response ()" il y a un retour.

    Avez-vous une idée ?

    Merci d'avance,
    Bien cordialement.

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    C'est parce que ta requete ajax n'est pas finie, que déjà tu passes dans ton alert...
    asynchrone

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    var response = objXMLHttpRequest.responseText;
    le retour est du texte qui ne contient aucun attribut !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Par défaut
    Je vous remercie de vos aides, mais j'ai pas tout a fait compris

    Pourtant dans mon exemple plus haut je fait l'alert tout à la fin et si je ne me trompe pas, la 4eme étape est la dernière ?

    Pour ce qui est de l'attribut, je ne vois pas. Je suis désolé encore

    Est ce que vous pouvez m'en dire une peu plus SVP ?

    Merci

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    callBack : function(data) {
    	return data.script;
    }
    Commence par te poser la question de savoir dans quelle fonction tu fais le return, donc quelle fonction le reçoit
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Citation Envoyé par nicko_73 Voir le message
    Pourtant dans mon exemple plus haut je fait l'alert tout à la fin et si je ne me trompe pas, la 4eme étape est la dernière ?
    Et bien c'est là que tu te trompes ; un peu de lecture http://javascript.developpez.com/faq...jax.asynchrone

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2009
    Messages : 115
    Par défaut
    Merci pour la lecture

    1°) Problème
    Dites moi si je me trompe lorsque je mets true dans le troisième argument de la fonction open(), ajax est asynchrone. Donc il utilise onreadystatechange je peux donc faire autre chose a coté en attendant la fin de l'action ajax.

    Donc dans mon cas, avec exécution rapide du script, il se peut qu'il affiche une valeur qui n'existe pas encore d'où undefined.

    J'ai donc mis false dans le troisième argument par contre il n'a plus l'air du tout de passer dans cette partie du script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objXMLHttpRequest.onreadystatechange = function() {manager.response(setting.callBack)};
    2°) Problème
    Commence par te poser la question de savoir dans quelle fonction tu fais le return, donc quelle fonction le reçoit
    Alors oui effectivement je fait en return que dans la fonction callBack, j'ai donc modifier ma méthod get comme ceci :

    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
     
    	get : function(setting) {
    		objXMLHttpRequest = manager.requestObject();
     
    		if(typeof(setting.mode) == 'undefined') {
    			setting.mode = true;
    		}
     
    		if(typeof(setting.json) == 'undefined') {
    			manager.json = false;
    		} else {
    			manager.json = setting.json;
    		}
     
    		objXMLHttpRequest.open('GET', setting.url, setting.mode);
     
    		objXMLHttpRequest.onreadystatechange = function() {return manager.response(setting.callBack)};
     
    		objXMLHttpRequest.send(null);
     
    		return objXMLHttpRequest;
    	},
    Mais là c'est un autre problème qui viens à moi c'est qu'il me retourne l'objet : XMLHttpRequest.

    j'ai donc mis XMLHttpRequest.responseText dans le dernier return, mais àa m'affiche la valeur qu'en mode synchrone (si je ne n'embrouille pas).

    Je ne vois pas comment faire pour que cela fonction dans les deux cas.

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Il faut bien comprendre une chose, c'est que quand une fonction a appelle une fonction b, un return dans la fonction b est pertinent car la fonction a attend bien sagement que b ait fini son exécution pour continuer son traitement.
    Dans le cas d'une requête Ajax asynchrone, ce n'est pas le cas, la requête est lancée et la fonction continue son traitement. Une instruction return dans le callback n'a donc pas beaucoup de sens dans ce cas.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

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

Discussions similaires

  1. eval de json en retour d'ajax sous IE
    Par Isalyn dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 29/02/2012, 08h21
  2. Object en retour d'ajax
    Par the-destroyer dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/03/2010, 08h37
  3. Réponses: 2
    Dernier message: 05/04/2009, 15h41
  4. [AJAX] interface boucle retour fonction Ajax dans code Php
    Par sami117 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/02/2009, 19h41
  5. [AJAX] Le retour d'AJAX n'est pas "actif"
    Par DrDam dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 08/12/2008, 14h29

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