函数成功运行一次然后连续失败

时间:2013-09-12 21:25:47

标签: javascript jquery json

我不确定为什么我的功能只能运行一次。基本上在我的JSON中,GhStatus和CsStatus的值都为0,所以我期待两次警告“崩溃”。

但是,这组警报只发生一次。然后根据Chrome开发者工具,我每隔2秒就会收到错误消息:

    Uncaught SyntaxError: Unexpected identifier

但是,输出并未指出代码中出现的位置= [

    $(document).ready(GrabGhCsStatus());

    function GrabGhCsStatus() {
    var url = '@Html.Raw(Url.Action("index","GhCs"))';
    window.setInterval(
        $.get(url,function(data) {
            if (data.GhStatus == 0) {                                                  
                $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });            
                alert('crash');
            }
            else {
                $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });         
                alert('running');
            }
            if (data.CsStatus == 0) {                                                 
                $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });     
                alert('crash');
            }
            else {
                $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });     
                alert('running');
            }
        }, "json"), 2000);                                                  

   }

我格式化此代码的方式或我将函数放在哪里影响输出?

3 个答案:

答案 0 :(得分:4)

语法错误,添加更多功能并正确关闭它们:

$(document).ready(function() { // needs anonymous function
    GrabGhCsStatus();
});

function GrabGhCsStatus() {
    var url = '@Html.Raw(Url.Action("index","GhCs"))';
    $.get(url, function (data) {
        if (data.GhStatus === 0 || data.CsStatus === 0) {
            $('#GhCsStatus_CS').buttonMarkup({
                icon: 'myapp-cs'
            });
        }else{
            $('#GhCsStatus_GH').buttonMarkup({
                icon: 'myapp-gh'
            });
        }
        setTimeout(GrabGhCsStatus, 2000);
    }, "json");
}

答案 1 :(得分:2)

setInterval的第一个参数需要是一个函数。

 window.setInterval( function() {

    $.get(url,function(data) {
        if (data.GhStatus == 0) {                                                  
            $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });            
            alert('crash');
        }
        else {
            $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });         
            alert('running');
        }
        if (data.CsStatus == 0) {                                                 
            $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });     
            alert('crash');
        }
        else {
            $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });     
            alert('running');
        }
    }, "json") }, 2000);

答案 2 :(得分:1)

是的,你想将$ .get调用括起来并将该函数传递给setInterval:

window.setInterval( function() {
    $.get....
}, 2000 );

setInterval需要一个函数作为第一个参数。 在你的情况下,$ .get()的返回值被传递到setInterval。 这可能是未定义的。