Дополнительный параметр для функции успеха ajax в jQuery - PullRequest
5 голосов
/ 14 июля 2010

Я извлекаю XML-файл, используя этот код:

function getMaps(){

    toLoad = loadMaps.length;

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

, который работает нормально, но я хочу дать processMap другой параметр (а именно loadMaps [i], имя, под которым хранится загруженный файл.xml)

Я не могу понять, как это сделать, не прибегая к глобальным переменным, а это не то, чего я хочу.

Ответы [ 3 ]

5 голосов
/ 14 июля 2010

JQuery success callback имеет три параметра, которые нельзя изменить или расширить.Поэтому вам нужно вызывать вашу функцию в анонимной функции, которая закрывается.

for (var i = 0; i < loadMaps.length; i++){
    $.ajax({
      type: "GET",
      url: loadMaps[i],
      dataType: "xml",
      success: function(xhr, textStatus, error){
           processMap(loadMaps[i]);
      }
    });
}
1 голос
/ 20 марта 2014

Проблема принятой проблемы, что «i» всегда будет с последним значением в цикле, по крайней мере, событие Success происходит быстрее, чем следующая итерация цикла, что почти никогда не происходит.как это работает в моем случае:

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])
        });
    }
}

Вот оригинальный ответ на аналогичный вопрос: как передать несколько аргументов функции onSuccess в Prototype?

1 голос
/ 14 июля 2010
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');
          }
        });
    }
}
...