我知道还有其他问题可以解决同一个问题,但我找不到我理解的答案。
我试图通过循环遍历页面名称数组来读取页面数组,然后使用jQuery的$ .get函数来获取页面的内容。 我相信这是由于循环关闭,只有循环的最后一个回调触发。 但是,我不明白解决这个问题或如何解决这个问题,有人可以解释一下吗?
以下是代码:
function checkall2()
{
i = 0;
for(i in $servers) {
$.get("servers/" + $servers[i], function(result) {
alert(result + $servers[i]);
});
}
}
答案 0 :(得分:4)
这是范围问题 - i
正在被“覆盖”,并且当最终触发回调时,其值对于所有这些都是相同的。
由于您使用的是jQuery,因此可以使用迭代器:
$.each($servers, function(i, server) {
$.get("servers/" + server, function(result) {
alert(result + server);
});
});
恕我直言,这看起来更加清晰。
答案 1 :(得分:3)
我认为这是一个范围问题 - 尝试并分配给循环中的本地,如下所示:
function checkall2()
{
i = 0;
for(i in $servers) {
var server = $servers[i];
$.get("servers/" + server, function(result) {
alert(result + server);
});
}
}
已修改以显示正常工作$.each
- > http://api.jquery.com/jQuery.each/
function checkall2()
{
$.each($servers, function(index, server) {
$.get("servers/" + server, function(result) {
alert(result + server);
});
});
}
答案 2 :(得分:0)
你不能在循环中调用异步方法,而是这样做:
function checkall2(i)
{
if(i< $servers.length) {
$.get("servers/" + $servers[i], function(result) {
alert(result + $servers[i]);
checkall2(++i);
});
}
}
答案 3 :(得分:0)
var $servers = [1,2,3];
function checkall2()
{
i = 0;
for(i in $servers) {
$.get("servers/" + $servers[i], function(result) {
alert(result + $servers[i]);
});
}
}
checkall2();
这在我的机器上运行正常。您确定您的全局变量是否正常?
答案 4 :(得分:0)
好的我弄清楚它为什么不起作用。 谢谢佩德罗向我解释这个问题。 所以变量结果每次都不同,没有问题,只是因为所有三个文件的内容都相同,所以一旦我改了它们,我就意识到结果是不同的。
$ servers [i]每次都返回相同的原因,是因为一旦循环完成了回调,然后调用,那时我就在循环的末尾,所以它只返回$ server [2]三次(因为2是循环的结束)。