2

我知道还有其他问题可以解决相同的问题,但我找不到我能正确理解的答案。

我试图通过遍历一组页面名称来读取一组页面,然后使用 jQuery 的 $.get 函数来获取页面的内容。我相信这是由于循环关闭,只有循环的最后一个回调才会触发。但是,我不明白解决这个问题的方法或如何解决它,有人可以解释一下吗?

这是代码:

function checkall2()
{
    i = 0;
    for(i in $servers) {
        $.get("servers/" + $servers[i], function(result) {
            alert(result + $servers[i]);
        });
    }
}
4

5 回答 5

4

这是一个范围问题 -i正在被“覆盖”,当最终触发回调时,所有回调的值都将相同。

由于您使用的是 jQuery,因此您可以使用迭代器:

$.each($servers, function(i, server) {
  $.get("servers/" + server, function(result) {
    alert(result + server);
  });
});

恕我直言,这看起来更清晰。

于 2012-08-05T13:58:36.323 回答
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);
        });
    });
}
于 2012-08-05T13:52:20.040 回答
0

您不能在循环中调用异步方法,而是这样做:

function checkall2(i)
{
    if(i< $servers.length) {
        $.get("servers/" + $servers[i], function(result) {
            alert(result + $servers[i]);
           checkall2(++i);
        });
    }
}
于 2012-08-05T13:54:41.867 回答
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();

这工作正常,在我的机器上。你确定你的全局变量没问题?

于 2012-08-05T13:55:12.413 回答
0

好的,我知道为什么它不起作用。谢谢佩德罗向我解释这个问题。所以每次的变量结果都不一样,这没有问题,只是因为三个文件的内容都相同,所以一旦我改变它们,我意识到结果是不同的。

$servers[i] 每次返回相同的原因是因为一旦循环完成回调然后调用,到那时 i 处于循环的末尾,所以它只返回 $servers[2]三次(因为 2 是循环的结尾)。

于 2012-08-05T14:18:24.230 回答