2010-07-14 80 views
4

我用這個代碼讀取XML文件:的jQuery的Ajax成功功能額外的參數

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)

我不知道如何做到這一點,而不訴諸全局變量,這不是我想要的。

+0

最好的解決方法是實際使用OOP,而不是在一個陣列通過指數週圍。 :) – WhyNotHugo 2012-08-24 04:32:08

回答

4

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

請注意這一點。 「我」應該總是loadMaps.length + 1.確保你的ajax代碼包含在一個帶有「i」變量參數的函數中 – ggomeze 2012-12-04 16:45:08

1
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'); 
      } 
     }); 
    } 
} 
+0

只要記得接受來自ajax調用的參數:'success:function(data){' – peirix 2010-07-14 09:11:32

1

「我」將永遠在循環中的最後一個值,至少是成功的事件發生不是一個循環,這幾乎是不可能發生的下一次迭代更快的接受問題的問題。

這是它在我的情況是如何工作的:

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

這裏有類似的問題,原來的答案:how to pass multiple arguments to onSuccess function in Prototype?