【问题标题】:why cannot recursively call function in jquery?为什么不能递归调用jquery中的函数?
【发布时间】:2014-09-09 03:54:28
【问题描述】:

我是 JQuery 的新手。我想在调用“成功”函数时递归调用“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);
});

【问题讨论】:

    标签: javascript jquery long-polling


    【解决方案1】:

    你只调用 pullNotification onSuccess -- 有 onFailure 吗?如果你这样做可能会更容易(也更容易推理)

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

    然后从success(result) { ... }中删除setTimeout

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

    【讨论】:

    • 也就是说,要删除setTimeout 函数,首先应该将后者存储在一个变量中。
    • 现在 'pullNotification' 功能可用,但 'success(result) {..}' 不起作用。我在脚本中写错了“onSuccess:成功”。
    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 2014-01-18
    • 2014-05-04
    • 2019-09-13
    • 2021-12-26
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多