如果你想使用with
保留i
,你要麼需要將它添加到一個對象,還引用了xhr
對象:
for(var i=0;i<5;i++){
with({i:i, xhr:new XMLHttpRequest()}) {
xhr.open("GET","d.php?id=" + i);
xhr.send(null);
xhr.onreadystatechange=function(){
if (xhr.readyState == 4 && xhr.status == 200)
alert(i);
}
}
}
或者您需要在with
之外創建xhr並將i
添加到它。
var xhr;
for(var i=0;i<5;i++){
(xhr = new XMLHttpRequest()).i = i;
with(xhr) {
open("GET","d.php?id=" + i);
send(null);
onreadystatechange=function(){
if (readyState == 4 && status == 200)
alert(i);
}
}
}
但是,如果你想有一個適當的,面向未來的解決方案,使在提供所需處理的變量變量範圍的處理程序。
function doRequest(i, xhr) {
xhr.open("GET","d.php?id=" + i);
xhr.send(null);
xhr.onreadystatechange=function(){
if (xhr.readyState == 4 && xhr.status == 200)
alert(i);
}
}
,並調用它是這樣的:
for(var i=0;i<5;i++){
doRequest(i, new XMLHttpRequest());
}
或者,如果你堅持說,內聯函數的一些事,你可以做這樣的:
for(var i=0;i<5;i++){
(function (i, xhr) {
xhr.open("GET","d.php?id=" + i);
xhr.send(null);
xhr.onreadystatechange=function(){
if (xhr.readyState == 4 && xhr.status == 200)
alert(i);
}
}(i, new XMLHttpRequest());
}
有趣的語法。以前從未見過'用'這種方式在現實生活中使用。 –
你應該避免因各種原因使用'with'。它會在嚴格模式下拋出一個錯誤。 –
感謝評論傢伙,但我真正的問題是其他一些事情。 –