2016-08-30 70 views
0

我想发送变量到PHP forloop。出于某种原因,变量清空了。继承人的代码:在forloop失去JSON变量

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

我(在VAR时间)没有在上面的代码中定义。此外,您正在读取元素的文本1500次(除了有1500个警报框外)?任何你不在deleteImages()函数内放置'IDs'变量的原因?我对doSomething()的循环做什么感到困惑;这个代码需要一些修改.. – rsn

+0

如果我一次发送超过15个ID到我的PHP,它失败了,我有大约1500个ID,所以我做了一个forloop去通过所有的 – Mennyg

+0

所以为什么值得downvotes? – Mennyg

回答

0

由时间deleteImages运行超时,您不再在doSomething的范围内,因此IDs var不再存在。 setTimeoutwindow范围内执行您的功能。解决这个问题的一种方法是通过匿名定义调用的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); 
    } 
}; 

好运!

+0

这没有工作:( – Mennyg