2010-06-22 62 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