这是长轮询的当前实现吗?

时间:2012-04-12 19:40:16

标签: jquery ajax long-polling

如果是最新的,是否会出现调用堆栈溢出的问题?

因为它无限递归地称为自我

如果出现这样的问题,有没有更好的实施?

function waitForMsg(){
    $.ajax({
        type: "GET",
        url: "xxx.php",
        async: true,
        cache: false,
        timeout: 600000,
        success: function(data){
            handleFunction(data);
            waitForMsg();
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            XMLHttpRequest.abort();
            waitForMsg();
        }
    });
}

1 个答案:

答案 0 :(得分:1)

我认为这是一种递归,但不是严格意义上的当前上下文,因为你将匿名函数添加到传递给ajax函数的对象上,并且ajax调用立即返回(它不会任何评估功能的东西)。当ajax最终成功或失败时,需要调用的任何函数都在一个全新的上下文中,具有不同的堆栈值和堆栈位置。

BTW,我不确定我是否理解XMLHttpRequest.abort();调用。到那时,XMLHttpRequest已经失败了,所以不应该中止(我想!)。