2014-08-29 120 views
0

我在for循環中放置了一個異步回調函數(類似$.ajax)。這看起來多少有點像(編輯:更新的代碼,見註釋):JSHint:循環中的異步函數

var i = 0; 

for (; i < 5; i++) { 
    (function(index) { 
    $.ajax({ 
     url: "", 
     success: function() { 
     console.log(index); 
     } 
    }); 
    })(i); 
} 

它的工作,但JSHint給了我一個警告,說是這樣的:

「不要把函數中環「

通常我可以將我的callback函數放在我的循環之外並在每次迭代時調用該函數。不幸的是,我需要訪問循環內分配的變量(例如i)。所以我在尋找一個解決方案做類似如下:

var i = 0; 

function callback(data) { 
    // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data" 
    // in this function. But I only have access to "data", because "i" 
    // will always be 5 
} 

for (; i < 5; i++) { 
    $.ajax({ 
    url: "", 
    success: callback 
    }); 
} 
+3

那麼,在你的第一個例子中,'i'在所有的回調中也是'5'。請參見[JavaScript閉合內部循環 - 簡單實例](http://stackoverflow.com/q/750486/218196)。 – 2014-08-29 20:47:35

+1

您是否必須循環...您不能發送一個包含所有數據的請求嗎? – tymeJV 2014-08-29 20:47:40

+0

只需修復您的for循環並將此行添加到您的ajax調用'async:false' – Hackerman 2014-08-29 20:54:53

回答

2

在這種情況下,你可以使用一個返回訪問你需要的數據功能的功能。

var i = 0; 
function callback(i) { 
    return function (data) { 
    // I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data" 
    // in this function. 
    console.log(i) 
    } 
} 

for (; i < 5; i++) { 
    $.ajax({ 
    url: "", 
    success: callback(i) 
    }); 
} 

但是,當然最好是用單個請求而不是循環提交這些數據。