使用回调函数…Jquery.Get

使用回调函数…Jquery.Get,jquery,Jquery,我一直在寻找一个简单易懂的答案,但我找不到 我有一个jquery.get ajax函数来运行一些东西,运行大约需要10秒,因为我在php文档中有一个等待。我想在10秒后再次运行它,所以基本上是在ajax函数完成时。我正在考虑使用回调,但我不知道如何构造它,或者应该使用while循环还是。。我迷路了 这是我到目前为止的代码 function listen(callbackFn) { $.get('thread.php?tag=<? echo $tag ?>&userna

我一直在寻找一个简单易懂的答案,但我找不到

我有一个jquery.get ajax函数来运行一些东西,运行大约需要10秒,因为我在php文档中有一个等待。我想在10秒后再次运行它,所以基本上是在ajax函数完成时。我正在考虑使用回调,但我不知道如何构造它,或者应该使用while循环还是。。我迷路了

这是我到目前为止的代码

function listen(callbackFn) {
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username '];} ?>', function(data) {
        $('#chats').append(data);
        callbackFn;
    });
};
函数监听(callbackFn){
$.get('thread.php?标记=&username=',函数(数据){
$(#chats')。追加(数据);
Callbackbon;
});
};

我认为最好的办法是将其包装成一个函数并递归调用:

function poll() {
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', function(data) { 

            $('#chats').append(data); 
            poll();
    });
}

poll();
函数轮询(){
$.get('thread.php?标记=&username=',函数(数据){
$(#chats')。追加(数据);
poll();
});
}
poll();

每次Ajax调用返回时,这将几乎永远轮询。

将代码放入函数中,并以10秒的超时递归调用它:

function do() {
    $.get('...', function (data) {
        // data processing...

        setTimeout(do, 10000);
    });
}

do();

这应该适合您:

(function repeat_request(){
    $.get('thread.php?tag=<? echo $tag ?>&username=<? if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
        function(data) { 
            $('#chats').append(data); 
            repeat_request();
        }
    );
})();
您可以尝试:

function listen()
{
$.get('thread.php?tag=<?php echo $tag ?>&username=<?php
if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
    function(data) { 
        $('#chats').append(data); 
        setTimeout(listen,100); // prevent recursive call
    } 
);  
};
函数监听()
{
$.get('thread.php?标记=&username=',
函数(数据){
$(#chats')。追加(数据);
setTimeout(listen,100);//防止递归调用
} 
);  
};

要在原始调用后再次调用.get()?在网页的整个生命周期中,这是不是每10秒重复一次?假设这是我想要的,我更喜欢让客户端浏览器使用setInterval,而不是让php等待10秒。嗯……我必须让php等待10秒……我正在做长时间的轮询。但是,在这种情况下,我仍然可以将函数放在成功块中,对吗?@scott似乎PHP处理需要一段时间(这可能是由于等待、延迟或任何其他因素),下一个调用应该在前一个调用完成10秒后启动。这就是它的作用。在我看来,这是有道理的。有一个间隔可能会很快导致对服务器的持续请求,而不会在其间出现停顿。@Robert让PHP等待并不长。PHP在等待什么?从技术上讲,它不是在等待,它一直在进行sql查询,其间总共等待了10秒。我似乎无法让它工作,我在使用firebug,它似乎只运行了一次,然后它就不再调用递归函数了。
function listen()
{
$.get('thread.php?tag=<?php echo $tag ?>&username=<?php
if($_SESSION['loggedin']=='true'){echo $_SESSION['username'];} ?>', 
    function(data) { 
        $('#chats').append(data); 
        setTimeout(listen,100); // prevent recursive call
    } 
);  
};