我试图在for循环内发出几个服务器请求。我发现了[\这个问题,\并实施了建议的解决方案。但是,它似乎不起作用。
for (var i = 1; i <= 10; i++) { (function(i) { if(<some conditions>) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp[i]=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp[i]=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp[i].onreadystatechange=function() { if (xmlhttp[i].readyState==4 && xmlhttp[i].status==200) { document.getElementById("preselection").innerHTML=xmlhttp[i].responseText; } } xmlhttp[i].open("GET","getBuoys.php?q="+i,true); xmlhttp[i].send(); } })(i); }
如果我删除了for循环并将所有xmlhttp [i]更改为xmlhttp,那么对于一个元素来说一切都很好,但是我无法发出多个请求。在此先感谢您的任何建议。
尝试下面的代码段
// JavaScript window.onload = function(){ var f = (function(){ var xhr = [], i; for(i = 0; i < 3; i++){ //for loop (function(i){ xhr[i] = new XMLHttpRequest(); url = "closure.php?data=" + i; xhr[i].open("GET", url, true); xhr[i].onreadystatechange = function(){ if (xhr[i].readyState === 4 && xhr[i].status === 200){ console.log('Response from request ' + i + ' [ ' + xhr[i].responseText + ']'); } }; xhr[i].send(); })(i); } })(); }; // PHP [closure.php] echo "Hello Kitty -> " . $_GET["data"];
响应
Response from request 0 [ Hello Kitty -> 0] Response from request 1 [ Hello Kitty -> 1] Response from request 2 [ Hello Kitty -> 2]