2016-04-30 91 views
0

我無法通過$獲得()函數 傳遞變量的值不同,請檢查此代碼以瞭解更多關於我的問題

var addressFieldValues = ['address1', 'address2', 'address3']; 

for(i=0; i<addressFieldValues.length; i++) { 
var address = addressFieldValues[i]; 
$.get('function.php', address, function(data){ 
    alert(address); // alerts address1 all time 
}); 
} 

爲什麼提醒「地址1」這3次?因爲它應該提醒3個不同的地址。在對象格式

+0

要解決此問題,您可以使用['讓address'(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let)支持的瀏覽器或[封閉函數](http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example)。原因是:var address只存在於整個循環中,並且由於'。.get()'異步運行,'alert(address);'不會被執行,直到'for'循環完成並被重新分配'var address'多次。 –

+0

使用'.forEach()'代替循環也可以解決問題。 – Pointy

回答

2

一個選擇是將你的get請求包裝在一個函數中,並將地址作爲參數傳入。這樣,您可以避免異步問題。

function get(address) { 
    $.get('', address, function(data) { 
     alert(address); 
    }); 
} 

var addressFieldValues = ['address1', 'address2', 'address3']; 
for (i = 0; i < addressFieldValues.length; i++) { 
    var address = addressFieldValues[i]; 
    get(address); 
} 
+0

非常感謝,它的工作;) – Beqa

0

Set請求,不串:

$.get('function.php', {'address': address}, function(data){ 
    alert(data); 
}); 

問題二:提醒服務器數據,而不是。