2010-06-22 61 views
3

现在,这是一个有趣的问题。我有一个对象阵列,如下所示:JavaScript:将更改的参数传递给回调

objRequests = [ 
    { 
     url: "/cgi-bin/script1.cgi", 
     dest: "#div1" 
    }, 
    { 
     url: "/cgi-bin/script1.cgi", 
     dest: "#div2" 
    } 
]; 

现在,我遍历这些对象加载使用jQuery的$ .getJSON()方法在特定的地址的服务器和一些花哨通过回调函数重整后的一些信息,需要将HTML放入通过'dest'指定id的div中。

通常,如果我需要指定额外的数据进入回调,我会使用匿名函数,并且工作得很好。这里的问题是目标的变量指针似乎保持不变,因此每个回调触发时,目标总是等于“#div2”。

我已经试过如下:

for (var loop = 0; loop < objRequest.length; loop++) 
{ 
    var exec = new function(objResponse) 
    { 
     processResponse(objResponse, objRequest[loop].dest); 
    } 

    exec.dest == objRequest[loop].dest; 

    $.getJSON(objConfig.strTicketScript, exec); 
} 

以及

for (var loop = 0; loop < objRequest.length; loop++) 
{ 
    var destination = objRequest[loop].dest; 

    var exec = new function(objResponse) 
    { 
     processResponse(objResponse, destination); 
    } 

    exec.dest == objRequest[loop].dest; 

    $.getJSON(objConfig.strTicketScript, exec); 
} 

,但由于某种原因,Firefox的似乎仍然没有建立在匿名函数个人数据。有没有办法在每次迭代中获得对数据的唯一引用?

+2

看到所有相关的问题 - [+ JavaScript的封+环(http://stackoverflow.com/questions/tagged/javascript+closures+loops) – Anurag 2010-06-22 21:10:59

+0

一个非常好的答案可以在这里找到:http://stackoverflow.com/questions/1552941/variables-in-anonymous-functions-can-someone-explain-the-following – Shog9 2010-06-22 23:15:23

+0

这两个伟大的联系。谢谢(你的)信息。由于我不知道要搜索什么,所以搜索时遇到了一些麻烦:S – RandomInsano 2010-06-23 14:57:33

回答

3

你需要做一个封闭:

var exec = (function(dest){ 
    return function(objResponse) { 
    processResponse(objResponse, dest); 
    } 
})(objRequest[loop].dest); 
+1

这就是我无法看到的最奇怪的符号。但这封闭的事情,非常翔实!我在这里找到了更多信息: http://www.jibbering.com/faq/notes/closures/ – RandomInsano 2010-06-23 14:19:54