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 :
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);
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
 
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
}
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 )".

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 :
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
	}())
}
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...

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 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
 
$.ajaxQueue({url:url1});
$.ajaxQueue({url:url2});
$.ajaxQueue({url:url3});
...
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 ?

Merci encore