Paramètre supplémentaire pour la fonction de succès ajax de jQuery

Je vais chercher un fichier XML en utilisant ce code:

function getMaps(){ toLoad = loadMaps.length; for (var i = 0; i < loadMaps.length; i++){ $.ajax({ type: "GET", url: loadMaps[i], dataType: "xml", success: processMap }); } } 

Ce qui fonctionne bien, mais je veux donner à processMap un autre paramètre (à savoir loadMaps [i], le nom sous lequel stocker le xml chargé)

Je ne peux pas comprendre comment faire cela sans recourir à des variables globales, ce qui n’est pas ce que je veux.

Le success callback jQuery a trois parameters, qui ne peuvent pas être modifiés ou développés. Vous devez donc appeler votre fonction dans une fonction anonyme qui se ferme.

 for (var i = 0; i < loadMaps.length; i++){ $.ajax({ type: "GET", url: loadMaps[i], dataType: "xml", success: function(xhr, textStatus, error){ processMap(loadMaps[i]); } }); } 
 function getMaps(){ toLoad = loadMaps.length; for (var i = 0; i < loadMaps.length; i++){ $.ajax({ type: "GET", url: loadMaps[i], dataType: "xml", success: function() { // do anything processMap(x,y,z,'foo'); } }); } } 

Le problème du problème accepté selon lequel “i” sera toujours avec la dernière valeur de la boucle, du moins l’événement Success se produit plus rapidement que la prochaine itération d’une boucle, ce qui n’est presque jamais le cas.

Voici comment cela a fonctionné dans mon cas:

 function getMaps(){ toLoad = loadMaps.length; for (var i = 0; i < loadMaps.length; i++){ $.ajax({ type: "GET", url: loadMaps[i], dataType: "xml", success: (function(loadMap){ return function processMap(response){ // code of processMap function ... alert(loadMap); } })(loadMaps[i]) }); } } 

Voici la réponse originale à une question similaire: comment passer plusieurs arguments à la fonction onSuccess dans Prototype?