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

jQuery Discussion :

Deferred, DOM et scope ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Par défaut Deferred, DOM et scope ?
    Bonjour,

    je me lance depuis peu dans la librairie jQuery et son object $.Deferred() et je me suis pris la tête pendant un moment avec la situation suivante :

    J'ai une méthode asynchrone que j'appelle 3 fois de suite de manière chainée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var u = $("#username").val();
    var s = $("#server").val();
    var p = $("#pwd").val();
    var r = $("#recipient").val();
    save("username",u)
    	.then(function() {return save("server",s);})
    	.then(function() {return save("pwd",p);})
    	.then(function() {return save("recipient",r);})
    	.then($("#mycontent").load("main.html"));
    J'ai du sortir de la fonction les appels à val (lignes 2 à 5) car sinon val() me retournait toujours undefined.

    Sauf que pour la fonction load (le pendant de la fonction save !!), j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    load("username","")
    	.then(function(){ return load("server",""); })
    	.then(function(){ return load("pwd",""); })
    	.then(function(){ return load("recipient",""); });
    avec dedans un bout de code de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    search.then(
    	function(result){
    		if (result.length > 0){
    			console.debug(_name + " found ! (" + result[0].json["value"] + ")");
    			$("#" + _name).val(result[0].json["value"]);
    			def.resolve();
    		}
    et là l'appel à val(xxx) fonctionne !

    Ma question à deux balles est donc "quand la fonction val() est elle capable de voir mon arbre DOM ?" et les questions corollaires : quand retourne t elle "" ou undefined (cf. ma réponse du dessous)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 70
    Par défaut Je désespère
    en fait selon où est le alert, j'ai également parfois des "" au lieu de undefined :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    function save(_name,_value){
    	var def = $.Deferred();
    	alert("->" + $("#" + _name).val()); // always undefined, why ?
    	prefs.find({name:_name}).then(
    		function(result){
    			if (result.length == 0){
    				console.debug("saving " + _name + " with value " + _value);
    				prefs.add({name:_name,value:_value},{}).then(function(){
    					console.debug("save ok (" + _name + ")");
     
    					def.resolve();
    				});
    			}
    			else{
    				console.debug("updating " + _name + " with value " + _value);
    				result[0].json["value"] = _value;
    				prefs.replace(result,{}).then(function(){
    					console.debug("update ok (" + _name + ")");
     
    					def.resolve();
    				});
    			}
    		}
     
    	);
    	return def.promise();
    }
     
    function load(_name,_default){
    	var def = $.Deferred();
    	alert("->" + $("#" + _name).val()); // always empty string (!= undefined)
    	console.debug("searching for property " + _name + "...");
    	var search = prefs.find({name:_name});
    	search.then(
    			function(result){
    				if (result.length > 0){
    					console.debug(_name + " found ! (" + result[0].json["value"] + ")");
    					$("#" + _name).val(result[0].json["value"]);
    					alert("-->" + $("#" + _name).val()); // always works
    					def.resolve();
    				}
    				else{
    					console.debug(_name + " not found...");
    					$("#" + _name).val(_default);
    					alert("-->" + $("#" + _name).val()); // always works
    					def.resolve();
    				}
     
    			}
    	);
    	return def.promise();
    }
     
    function save_prefs(){
    		var u = $("#username").val();
    		var s = $("#server").val();
    		var p = $("#pwd").val();
    		var r = $("#recipient").val();
    		save("username",u)
    		.then(function() {return save("server",s);})
    		.then(function() {return save("pwd",p);})
    		.then(function() {return save("recipient",r);})
    		.then($("#mycontent").load("main.html"));
     
     
    }
     
    function load_prefs(){
    	load("username","")
    	.then(function(){ return load("server",""); })
    	.then(function(){ return load("pwd",""); })
    	.then(function(){ return load("recipient",""); });
    }
    Je n'y pige rien du tout

Discussions similaires

  1. recherche dans un document xml via DOM
    Par ndoye_zaff dans le forum APIs
    Réponses: 5
    Dernier message: 11/06/2003, 14h44
  2. XML DOM et gros fichiers
    Par Manu_Just dans le forum APIs
    Réponses: 4
    Dernier message: 28/03/2003, 09h50
  3. [DOM/SAX]Choix...
    Par miss8 dans le forum APIs
    Réponses: 4
    Dernier message: 17/03/2003, 18h37
  4. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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