我按照下面的示例继续使用mysql表刷新div。
http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery
我正在使用ajax的complete和timeout参数刷新div而不是使用setinterval和settimeout。
我遇到的问题是返回的数据可能包含链接,这些链接在单击时不起作用。我相信问题可能是div不断刷新,因此我忽略了点击。你如何在一个令人耳目一新的div中允许链接?它适用于setinveral和settimeout但我想使用长轮询来允许实时更新。
这是我的代码。
// get page url variables
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
// set var for parent id to scroll to
var tid = getUrlVars()["tid"];
var pid = getUrlVars()["pid"];
(function poll(){
// get latest page
$.ajax({
url: "ajax.tickets_details.php?tid=" + tid,
type: 'GET',
cache: false,
success: function(html) {
// print results from get in div
$("#ticket_updates").html( html );
},
complete: poll,
timeout: 30000
});
})();
谢谢!
答案 0 :(得分:0)
我刚刚阅读了该教程,它基于虚假信息。
本教程说:
这意味着我们的poll函数不会再被调用 ajax呼叫完成并且(至少)三十(30)秒已经过去。
这不是真的。如果您的请求以< 30秒它会立即再次发射,从而导致您的问题。超时的实际定义是:
设置请求的超时(以毫秒为单位)。这将覆盖 使用$ .ajaxSetup()设置的任何全局超时。超时时间开始 在$ .ajax调用的点上;如果有其他几个请求 进度和浏览器没有可用的连接,这是可能的 请求在发送之前超时。在jQuery 1.4.x和 如下所示,XMLHttpRequest对象将处于无效状态 请求超时;访问任何对象成员可能会抛出一个 例外。仅在Firefox 3.0+中,脚本和JSONP请求不能 超时取消;即使脚本到达,脚本也会运行 超时期限。
所以这意味着如果请求超过30秒,它将取消等待处理程序 (不是调用本身,这将继续,但javascript处理程序将超出范围)。
甚至有一条评论强调了这个缺陷:
我会找到一个新的教程,因为那个教程似乎在说废话。这种技术根本不是“服务器推送”。只有Web套接字可以从服务器推送。 HTTP 1.1根本不支持任何服务器推送方法。