在forloop中丢失JSON变量

时间:2016-08-30 16:18:18

标签: javascript json

我试图将变量发送到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变量为空。 有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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); 
  }
};
祝你好运!