2016-08-30 73 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