我试图将变量发送到forloop中的PHP。出于某种原因,变量清空了。下面是代码:
function doSomething() {
for (var i = 0; i < 1500; i+=15) {
var div1 = "delete"+i;
var IDs = document.getElementById(div1).textContent;
alert(IDs);
function deleteImages(){
var params = {
type: 'POST',
url: 'http://myserver.com/test.php',
data: {ID: IDs},
crossDomain: true,
success: function(data) {
var div = document.getElementById('dvCSV');
div.innerHTML = div.innerHTML + data + "<br>";
},
error: function() {
alert("Fail, please contact webmaster ASAP");
},
};
alert(JSON.stringify(params));
$.ajax(params);
}
var time = 3000*i;
setTimeout(deleteImages, time);
}
};
第一个alert(IDs)
,变量会弹出我的屏幕。问题是,当我alert(JSON.stringify(params))
时,ID变量为空。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
在deleteImages
超时运行时,您已不在doSomething
的范围内,因此IDs
var不再存在。 setTimeout
在window
范围内执行您的功能。修复此问题的一种方法是通过在setTimeout调用中匿名定义函数来创建闭包,如下所示:
function doSomething() {
for (var i = 0; i < 1500; i+=15) {
var div1 = "delete"+i;
var IDs = document.getElementById(div1).textContent;
alert(IDs);
var time = 3000*i;
// create the function here so that IDs remains a relevant var
setTimeout(function() {
var params = {
type: 'POST',
url: 'http://myserver.com/test.php',
data: {ID: IDs},
crossDomain: true,
success: function(data) {
var div = document.getElementById('dvCSV');
div.innerHTML = div.innerHTML + data + "<br>";
},
error: function() {
alert("Fail, please contact webmaster ASAP");
},
};
alert(JSON.stringify(params));
$.ajax(params);
}, time);
}
};
祝你好运!