2010-07-14 40 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?