刷新javascript if函数内的语句

时间:2016-08-11 09:13:38

标签: javascript jquery json

我正在尝试刷新函数内的if语句,但它给了我一个错误

  

canont读取状态属性

$.getJSON("<url>/clients.json", function(data) {
    var tr;
    for (var i = 0; i < data.length; i++) {
        tr = $('<tr/>');
        tr.append("<td>" + data[i].client +  "</td>");
        $('table').append(tr);

        var refresh = function() {
            if (data[i].status == "up") {
                $('td', tr).css ('background-color', '#88d066');
            } else {
                $('td', tr).addClass("statusHOSTDOWN");
            };
        }; 
        setTimeout(refresh, 5000);
    }
});

JSON示例:

[{
    "client": "client1",
    "ip": "127.0.0.1",
    "status": "up"
}, {
    "client": "client2",
    "ip": "127.0.0.2",
    "status": "up"
}]

在没有在setTimeout中运行整个函数的情况下,使用JSON中的新信息重新运行if语句和更新表颜色的最佳方法是什么。因为在seTimeout中运行整个函数只需在现有表的底部附加更多表而不用新信息替换它。

2 个答案:

答案 0 :(得分:0)

首先通过调试确保'data'参数确实具有属性状态,如果是,则在声明函数var refresh之前将data [i]的值提取到变量。

var myDataStatus = data[i].status;
var refresh = function() {...

在if中直接从myDataStatus引用“up”。

答案 1 :(得分:-2)

请试试这段代码:

function refresh(statusVal, trObj){
    if(statusVal == "up")
    {
        $('td',trObj).css ('background-color', '#88d066');
    } else {
        $('td',trObj).addClass("statusHOSTDOWN");
    };
}

$.getJSON("<url>/clients.json",
function (data) {

    var tr;
    for (var i = 0; i < data.length; i++) {
        tr = $('<tr/>');
        tr.append("<td>" + data[i].client +  "</td>");
        $('table').append(tr);
    setTimeout(function(){refresh(data[i].status, tr);}, 5000);
    }

});