【发布时间】:2014-01-27 06:59:20
【问题描述】:
我已经尝试了好几个小时才能让它工作,只是对 Web 服务器上的 php 脚本进行基本的长轮询。我通过一个文本文件来测试它,我检查最后修改时间并将其与 javascript 发送请求的时间进行比较。如果文件的日期较新,那么我会发回一条消息“更新”。当我在浏览器中加载页面时,它会发送请求并按预期等待,我可以使用 Chrome 开发工具进行验证,但是当我编辑文件(即更改修改日期)时,update.php 脚本永远不会回显更新消息。相反,它会一直持续到超时。
我认为这可能与缓存有关,因为如果我将 JS 请求的 URL 复制到单独的选项卡中,它也不会响应,但是如果我更改 jQuery 附加的随机参数以防止缓存,我会得到想要的“更新”消息返回。有什么想法有什么问题吗?
谢谢
主页面运行的javascript:
<script>
window.onload = function longPoll(){
var d = new Date;
$.ajax({
url: "http://localhost/site/update.php?time=" + d.getTime(),
success: function(data){
console.log(data);
},
error: function (xhr, ajaxOptions, thrownError) {
//error message here
},
type: "GET",
cache: false,
complete: longPoll,
timeout: 600000
});
}
</script>
更新脚本:
// while the file is NOT newer
while(!(filemtime('./test.txt') > $client_time)) {
sleep(1);
}
echo 'update';
?>
【问题讨论】:
-
你必须在文件信息调用之间调用
clearstatcache()php.net/manual/en/function.clearstatcache.php -
请注意 apache 和 longpolling 存在问题。 stackoverflow.com/questions/333664/…
标签: javascript php jquery ajax long-polling