您的问题很棘手,原因如下:
AJAX 请求是单个用户请求。除非您使用多线程,否则发送多个请求不会让您访问相同的响应,这相当于每次 ping 服务器时打开新请求。
与大多数人的想法不同,Ajax 并不是一个神奇的灯笼。这只是您的浏览器向/从您的服务器发送和处理XML 请求(JSON)的一种方式。事实上,Ajax 本身代表 A同步 Javascript And XML:
这样……
如何开始周期性的ajax刷新?
你没有。
您有两种选择:
- Ajax 长轮询
- 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。这通常用于极低负载的实例(因为您不断向服务器发送请求),例如聊天应用程序、cmets 等。
简而言之,长轮询是web sockets 的小弟弟。它是一种使用 JS 实现近乎实时功能的快速方法。您可以使用它来提供非常底层的信息,例如聊天响应、通知等。
Ajax 的主要限制是它会用请求轰炸您的服务器。这很糟糕,尤其是在处理大量数据时。
--
下一个选项是使用ajax callbacks。
这实际上是您将 Ajax 响应包装在一个函数中的地方,允许您处理 异步 请求同步。听起来很复杂?并非如此,一旦您了解了 Ajax 的工作原理。
Ajax 旨在为您提供一种向服务器发送异步请求的方法。这意味着您的请求将绕过标准浏览器流程。
这是一个标准的“同步”请求,就像所有网络浏览器的工作方式一样。
该设计旨在让您收到对您发送的每个请求的响应。例如,如果您单击一个链接,您实际上是在指示浏览器向服务器发送一个请求,它会将响应传递给服务器(以新网页的形式)。
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 请求并“等待”响应。这与设置“同步:真”相反,它会冻结浏览器。
如何解释服务器结果以停止周期性 ajax 刷新?
您使用 Ajax 回调并等待响应。
如果太大,请将其拆分为页面(根据@myst's 的答案)。
如果您仍然认为可以 ping 您的服务器并针对同一请求获得多个响应,请再次阅读我所写的内容。一个请求 = 一个响应。