为什么不能在jquery中递归调用函数?

时间:2014-09-09 03:54:28

标签: javascript jquery long-polling

我是JQuery的新手。我想在调用'success'函数时递归调用'pullNotification'函数作为长轮询,但是当我从浏览器调用请求时,我的脚本被称为'pullNotification'函数两次。所以请指导我如何解决它。以下是我的脚本。提前致谢。

jQuery(function($) {

    var data = [];

    function pullNotification() {
        var params = {};

        new RPC.Call({
            'method': 'users.getJsonUsers',
            'params': params,
            'onSuccess': success     
        });
    };

    function success(result) {
        if (data.length != 0)
        {
            for (var i = 0, item; item = result[i]; i++) {
                for (var k = 0; k < data.length; k++)
                {
                    if (item.userid == data[k])
                    {
                        this.found = true;
                        break;
                    }
                }
                if (this.found)
                {
                    this.data.push(item.userid);
                    $('<tr origclass="even_row" class="even_row">\n\\n\
                                    <td>' + item.userid + '</td>\n\
                                    <td>' + item.alias + '</td>\n\
                                    <td>' + item.surname + '</td>\n\
                                    </tr>').insertAfter('.nilar');
                }
                this.found = false;
            }
        }
        else {
            for (var j = 0; j < result.length; j++)
            {
                data.push(result[j].userid);
            }            
        }

        setTimeout(function() {
                pullNotification();
            }, 1000);
    }

    window.setTimeout(function() {
        pullNotification();
    }, 5000);
});

1 个答案:

答案 0 :(得分:2)

您只能调用pullNotification onSuccess - 是否有onFailure?如果你做了

,可能会更容易(也更容易推理)
window.setTimeout(function() {
  window.setInterval(function() {
    pullNotification();
  }, 1000);
}, 5000);

然后从setTimeout

中删除了success(result) { ... }

这样,无论发生什么事,您都会每秒致电pullNotification一次。如果请求的时间超过1秒,它确实有可能继续ping你的服务器。