我使用ajax使用下面的代码刷新页面上的表
是的,:class => 'btn btn-success btn-xs'%>
在服务器上,页面重新加载会启动一个生成大表的进程。 目前我从服务器发送一个简单的“静态处理”,如果大表没有准备好,如果大表已经准备好那么大量的html。
Q1。如何开始定期ajax刷新? Q2。如何解释服务器结果以停止定期ajax刷新?
答案 0 :(得分:1)
虽然@ mb_s88的答案是你问题的直接答案(我甚至赞成它),但我建议你重新考虑工作流程。
我建议AJAX响应总是返回X量或数据(即最多100行)。
更好的工作流程会感觉更具响应性,用户可以体验到#34;正在发生的事情" (而不仅仅是等待),您可以通过使用较小的数据库查询来避免服务器端的大阻塞任务。
例如:
我建议第一个AJAX请求将请求第一个"页面"结果和#34;继续"如果页面已满,则设置标志(即,返回100行将启动"继续"工作流程)。
我建议在加载下一个"页面时显示现有数据",每个请求都要求服务器提供特定页面(即从0
开始的页码和从...开始的行号0,要求page_number=1
会将行page_number * 100
返回到100+(page_number * 100)
)。
不完整的页面(少于100行)将停止循环。
正如您所看到的,此设计将使用较小的SQL请求(请求行X到Y而不是整个数据),对用户感觉更敏感,并允许用户开始读取数据,即使更多数据即将到来。
答案 1 :(得分:1)
由于以下几个原因,您提出的问题很棘手:
AJAX请求是单个用户请求。除非您使用多线程,否则发送多个请求将无法访问相同的响应,这相当于每次ping服务器时都会打开新请求。
与大多数人的想法不同,阿贾克斯并不是一个神奇的灯笼。它只是您的浏览器发送和发送的一种方式。处理来自/来自服务器的XML个请求(JSON)。事实上,Ajax本身代表 A 同步 J avascript A nd X ML:
...因此
如何开始定期ajax刷新?
你没有。
您有两种选择:
Long Polling描述为mb_s88
:
(function poll(){
setTimeout(function(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
//Setup the next poll recursively
poll();
}, dataType: "json"});
}, 30000);
})();
每隔X秒向服务器发送一次Ajax请求,并根据需要向DOM添加响应。这通常用于极低负载的实例(因为您正在向服务器发送常量请求),例如聊天应用程序,注释等。
简而言之,长期民意调查是web sockets的小弟弟。它意味着通过JS实现近实时功能的快捷方式。您可以使用它来提供非常低级别的信息,例如聊天响应,通知等。
Ajax的主要限制是它会根据请求轰炸您的服务器。这很糟糕,特别是如果您正在处理大量数据。
-
下一个选项是使用ajax callbacks。
这实际上是您在函数中包装Ajax响应的地方,允许您同步处理异步请求 。听起来很复杂?一旦你理解了Ajax的工作方式,就不一定了。
Ajax旨在为您提供向服务器发送异步请求的方法。这意味着您的请求将绕过标准浏览器流程。
这是标准的"同步"请求,就像所有Web浏览器的工作方式一样。
该设计旨在为您发送的每个请求收到响应。例如,如果您单击某个链接,您实际上是在指示浏览器向服务器发送请求,该请求会将响应传递给(以新网页的形式)。
AJAX使您能够绕过此功能,添加了将请求发送到范围之外的功能。这样做的好处包括 - 动态页面更新,通知,页面上应用的新信息over-and-above the original request ...
具有大多数Ajax功能的问题是必须等待的。异步,你无法将它添加到流程中...简而言之,如果你有依赖功能,那么就没有办法等待"
解决这个问题的方法是使用回调 ...
$(document).ready(function(){
doAjax("url", {data: here}, function(){
// Ajax "success" callback
}, function(){
// Ajax "error" callback
});
});
doAjax(url, data, success, error){
$.ajax({
url: url,
data: data,
success: success(data),
error: error(data)
});
});
这使您能够发送ajax请求和"等待"为了回应。这与设置" synchronous:true"相反,它会冻结浏览器。
如何解释服务器结果以停止定期ajax刷新?
您使用Ajax回调并等待响应。
如果它太大,请将其拆分为页面(根据@myst's
回答)。
如果你仍然认为你可以ping你的服务器并获得同一请求的多个回复,请阅读我再次写的内容。一个请求=一个响应。
答案 2 :(得分:0)
在您的脚本中,您可以将ajax请求设置为每隔x毫秒使用setInterval
,并且在timeOut执行的函数内,您可以使用条件取消超时执行。这看起来像这样:
intervalId = setInterval( function () {
{{ Do your ajax thing, catch response in variable called data }}
if (data.content !== "still processing") {
doWhateverThingWithData(data);
clearInterval(intervalId);
}
}, 3000)
最后的3000是每次执行之间的毫秒数。
编辑:意外使用setTimeout和clearTimeout而不是setInterval和clearInterval