我想让浏览器等待任何通知,但如果点击链接则停止等待。
这就是为什么我有一个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...
});
我无法找到错误/原因,也许有人找到了。谢谢
答案 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();