我有一个封闭ajax调用的for循环,我正在尝试确定将索引从for循环传递给回调函数的最佳方法.这是我的代码:
var arr = [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010];
for (var i = 0; i < arr.length; i++)
{
$.ajaxSetup({ cache:false })
$.getJSON("NatGeo.jsp", { ZipCode: arr[i], Radius:
document.getElementById("radius").value, sensor: false },
function(data)
{
DrawZip(data, arr[i]);
}
);
}
Run Code Online (Sandbox Code Playgroud)
目前,由于异步ajax调用,仅传递arr数组的最后一个值.除了同步运行ajax调用之外,如何将arr数组的每次迭代传递给回调函数?
我试图在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);
}
Run Code Online (Sandbox Code Playgroud)
如果我删除了循环和更改所有XMLHTTP [I]到XMLHTTP,一切工作就好了一个元素,但我不能让几个请求.在此先感谢您的任何建议.
我正在使用jQuery的$.getJSON()API从给定的URL中检索一组实用程序的数据.我真的想找到一种方法来重用每个实用程序的代码(它们都完全相同).由于循环正在执行而不考虑ajax调用,因此我无法找到保留循环值的方法.
我知道,那个描述很糟糕,所以这里是一个代码片段,它将它定义得更好一些:
var utility_types = [ 'Electricity', 'Gas', 'Water' ];
/** Retrieve known utility providers for the given zip code */
for( var i = 0; i < utility_types.length; i++ ) {
var type = utility_types[i];
$.getJSON( '/addresses/utilities/' + zip + '/' + type + '.json', null, function( data, status ) {
alert( 'Processing ' + type );
});
}
Run Code Online (Sandbox Code Playgroud)
我需要找到一种方法将类型值传递给回调,以便我可以应用正确的语法.没有它,所有3个循环都在针对"Water"实用程序执行.我知道为什么它不工作,我只是想知道是否有一个合理的解决办法.
谢谢.