页面上的PHP退出ajax abort()

时间:2014-07-21 11:07:57

标签: javascript php jquery ajax comet

我想让浏览器等待任何通知,但如果点击链接则停止等待。 这就是为什么我有一个PHP脚本作为while循环,如果发生某些事情就会结束然后返回事件。

PHP

require 'required.php';

ignore_user_abort ( false ); // I hoped this does it
set_time_limit ( 60 );

$lock = false; // maybe this helps?

register_shutdown_function ( function () {
    // click the stop button in your browser ...
    $lock = true;
    exit ();
} );

if (isset ( $_SESSION ['user'] ))   {

    while ( ! new_event () && !$lock)   {

        if (connection_status () != CONNECTION_NORMAL) {
            break; // and maybe this works???
        }
        sleep(1);
    }

echo json_encode (array('someparameter','...') );
} else {
echo 'login first';
}

我的JQuery AJAX代码在加载后开始等待,并在点击链接后调用abort()

var pollReq;
$(document).ready(function() {
        doPoll(); // do the first poll

});

function doPoll() {
   pollReq = $.post("wait.php", {parameter: value}, function(result) {
    // new event, do something
    doPoll();
    // this effectively causes the poll to run again as
    // soon as the response comes back
}, 'json');
}

如果点击了链接

$('a[href]').not('noajax').click(
        function(e) {
            e.preventDefault();
            if (typeof pollReq !== 'undefined') {
            pollReq.abort(); // stop waiting
            }
   // Do something...
});

我无法找到错误/原因,也许有人找到了。谢谢

1 个答案:

答案 0 :(得分:1)

经过这么多的尝试和搜索,我终于发现,这都是关于会话的。感谢this帖子,我更改了PHP,以便在loop

中工作

PHP

while ( ! newMsg ( $chatID, $lastID ) ) {
    // Did the connection fail?
    if (connection_status () != CONNECTION_NORMAL) {
        break;
    }
    session_write_close();
    sleep(1);
    session_start();
}

如果你有更好的解决方案,我很乐意看到它。

修改: 这只能起作用,因为它允许另一个脚本在其间的1秒内获取会话锁()。

如果您不需要在会话中写任何内容: 将session_write_close();放在while循环之前,并省略session_start();