在jquery和ajax中重复最后一个元素

时间:2017-07-30 12:05:57

标签: javascript jquery html node.js ajax

我的'for'循环与我的ajax请求有问题。我知道这里有很多非最好的练习所以请原谅我,我刚刚开始=]

所以这是我的代码:

var ServersObject = $("tr td:nth-child(2)");
var ServerArray = $.makeArray(ServersObject);
console.log(CurrentServer + 'outside ajax');
for (var i = 0; i < ServerArray.length; i++) {
    var CurrentServer = ServerArray[i].outerText;

    $.ajax({
        type: 'GET',
        data: { 'Server': CurrentServer },
        url: 'http://localhost/check',
        success: function(data) {
            if (data == '200') {
                console.log(CurrentServer + 'inside ajax');
                $("td:contains('" + CurrentServer + "')").next().text("OK");
            } else {
                $("td:contains('" + CurrentServer + "')").next().text("Not OK");
            }
        }
    });
}

正如您所看到的,我有两个'Console.log'消息和一组服务器。 “外部ajax”消息正在逐一显示所有服务器,但“内部ajax”消息只显示数组中的最后一个服务器。 我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:0)

使用这个。

for (var i = 0; i < ServerArray.length; i++) {
    var CurrentServer = ServerArray[i].outerText;

    $.ajax({
        type: 'GET',
        data: { 'Server': CurrentServer },
        url: 'http://localhost/check',
        success: function (data) {
            var newServer = ServerArray[i].outerText;
            if (data == '200') {
                console.log(newServer + 'inside ajax');
                $("td:contains('" + newServer + "')").next().text("OK");
            } else {
                $("td:contains('" + newServer + "')").next().text("Not OK");
            }
        }
    });
}

答案 1 :(得分:0)

您需要使用闭包来修复回调中的值,因为在迭代数组时CurrentServer会发生变化。有几种方法可以做到这一点。这是一个:

product category qty
123     A        3
345     B        2

这个想法是你传递给函数的值(对于像字符串这样的标量对象)在函数之外不会改变。因此,通过以这种方式将值传递给函数(闭包),您可以修复&#39;成功回调中代码引用的值。

答案 2 :(得分:0)

内部Ajax只记录一次?听起来状态只有200次。可能是另一个.ajax的快速执行是覆盖(因为缺少一个更好的词)之前它可以成功吗?

此外,在您提供的代码中,外部日志将永远不会工作(它应该在循环中我猜)