Bonjour,
D�sol� de vous emb�ter encore avec �a, mais je n'arrive pas � comprendre pourquoi je ne r�cup�re pas les "bonnes" variables dans mon contexte...
J'utilise le "plugin" jQuery.ajaxQueue :
Tout fonctionne comme attendu, sauf si j'appelle $.ajaxQueue dans le cadre d'une boucle, ie (code simplifi�) :
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 (function($) { // jQuery on an empty object, we are going to use this as our Queue var ajaxQueue = $({}); $.ajaxQueue = function( ajaxOpts ) { var jqXHR, dfd = $.Deferred(), promise = dfd.promise(); // queue our ajax request // Ici, ajaxOpts est bien toujours Ok pour moi //(ie, ajaxOpts.url est effectivement bien diff�rent � chaque appel, "url1", "url2","url3', etc) ajaxQueue.queue( doRequest ); // add the abort method promise.abort = function( statusText ) { // proxy abort to the jqXHR if it is active if ( jqXHR ) { return jqXHR.abort( statusText ); } // if there wasn't already a jqXHR we need to remove from queue var queue = ajaxQueue.queue(), index = $.inArray( doRequest, queue ); if ( index > -1 ) { queue.splice( index, 1 ); } // and then reject the deferred dfd.rejectWith( ajaxOpts.context || ajaxOpts, [ promise, statusText, "" ] ); return promise; }; // run the actual query /* Par contre, ici, ce n'est plus le cas, ajaxOpts.url est toujours la derni�re du tableau (cf. SCRIPTS_JS plus loin) sauf pour le premier appel (ajaxOpts.url est bien �gal � "url1" pour le premier appel, mais pour tous les autres appels, ajaxOpts.url est toujours �gal au dernier �l�ment du tableau) function doRequest( next ) { jqXHR = $.ajax( ajaxOpts ) .done( dfd.resolve ) .fail( dfd.reject ) .then( next, next ); } return promise; }; })(jQuery);
En fait je ne comprends pas o� je "perds" le fil au niveau de $.ajaxQueue puisqu'il semble que la closure sup�rieure est correcte lors de l'appel initial mais plus correcte lors de l'ex�cution de "function doRequest( next )".
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var SCRIPTS_JS = new Array( url1,url2,url3,... ) for (var i=0;i<SCRIPTS_JS.length;i++) { jQuery.extend( optsAjax, // défini par ailleurs { url: SCRIPTS_JS[i] } ); $.ajaxQueue(optsAjax); // Lors de cet appel, optsAjax correspond bien toujours à ce qui est attendu (ie: l'url est bien la courante dans la boucle }
C'est sans aucun doute (encore) un probl�me de scope/closure, etc, et j'ai bien essay� d'impl�menter les solutions donn�es par ailleurs (fonctions anonyme, etc), mais je dois surement tr�s mal m'y prendre...
Par exemple, j'ai essay� �a pour "contraindre" les variables dans la boucle :
Je sais que ce sujet a �t� abord� maintes fois sur ce forum (notamment ici http://www.developpez.net/forums/d13...ion-dynamique/) et par ailleurs, mais j'ai vainement essay� toutes les solutions trouv�es...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 for (var i=0;i<SCRIPTS_JS.length;i++) { (function () { jQuery.extend( optsAjax, // défini par ailleurs { url: JSSCRIPTS_URL + SCRIPTS_JS[i] } ); $.ajaxQueue(optsAjax); // Lors de cet appel, optsAjax correspond bien toujours à ce qui est attendu (ie: l'url est bien la courante dans la boucle }()) }
Merci d'avance pour votre patience et vos �ventuelles pistes de r�solution.
Bonne journ�e
PS : Dans le cadre de plusieurs appels hors bloucle, tout fonctionne comme attendu, ie :
Donc tout laisse � penser que c'est au niveau de l'appel de $.ajaxQueue(...) dans la boucle qu'il faudrait agir, mais o� et comment ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 $.ajaxQueue({url:url1}); $.ajaxQueue({url:url2}); $.ajaxQueue({url:url3}); ...
Merci encore
Partager