Jquery Rails ajax请求周期性地进行,直到得到具体的答复
我正在使用ajax刷新页面上的表,代码如下 true,:class=>“btn btn成功btn xs”%> 在服务器上,页面重新加载会启动一个进程来生成一个大表。 目前,我从服务器发送一个简单的“仍在处理”,如果大表还没有准备好,并且如果大表已经准备好,则发送大量html 问题1。如何开始定期ajax刷新?Jquery Rails ajax请求周期性地进行,直到得到具体的答复,jquery,ruby-on-rails,ruby,ajax,heroku,Jquery,Ruby On Rails,Ruby,Ajax,Heroku,我正在使用ajax刷新页面上的表,代码如下 true,:class=>“btn btn成功btn xs”%> 在服务器上,页面重新加载会启动一个进程来生成一个大表。 目前,我从服务器发送一个简单的“仍在处理”,如果大表还没有准备好,并且如果大表已经准备好,则发送大量html 问题1。如何开始定期ajax刷新? 问题2。如何解释服务器结果以停止定期ajax刷新?在脚本中,您可以使用setInterval将ajax请求设置为每x毫秒发出一次,并且在超时执行的函数中,您可以使用取消超时执行的条件。看起
问题2。如何解释服务器结果以停止定期ajax刷新?在脚本中,您可以使用
setInterval
将ajax请求设置为每x毫秒发出一次,并且在超时执行的函数中,您可以使用取消超时执行的条件。看起来是这样的:
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虽然@mb_s88的答案是对您的问题的直接答案(我甚至对它投了更高的票),但我建议您重新考虑工作流 我建议AJAX响应总是返回X个数量或数据(即最多100行) 一个更好的工作流会让人感觉响应更快,用户可以体验到“正在发生的事情”(而不仅仅是等待),通过使用更小的数据库查询,您可以避免服务器端的大阻塞任务 例如: 我建议第一个AJAX请求将请求结果的第一个“页面”,如果页面已满,则设置“继续”标志(即返回100行将启动“继续”工作流) 因此,我建议在加载下一个“页面”时显示现有数据,每个请求请求服务器指定一个页面(即,对于从
0
开始的页码和从0开始的行号,请求page\u number=1
将返回行page\u number*100
到100+(page\u number*100)
)
不完整的页面(少于100行)将停止循环
如您所见,此设计将使用较小的SQL请求(请求行X到Y,而不是整个数据),让用户感觉更具响应性,并允许用户在收到更多数据时开始读取数据。由于以下几个原因,您的请求很棘手: 请求是单用户请求。除非您使用多线程,否则发送多个请求将无法访问同一响应,这相当于每次ping服务器时打开新请求 与大多数人的想法不同,Ajax不是一个神奇的灯笼。它只是浏览器向服务器发送和处理请求(JSON)的一种方式。事实上,Ajax本身代表AsynchronousJavascriptAndXML: 因此
如何开始定期ajax刷新 你没有 您有两种选择:
(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追加响应。这通常用于极低负载的实例(因为您正在向服务器发送持续的请求),例如聊天应用程序、评论等
简言之,长轮询是最适合的。这是一种使用JS实现近实时功能的快速方法。您可以使用它来提供非常低级的信息,例如聊天响应、通知等
Ajax的主要限制是它用请求轰炸服务器。这是不好的,尤其是在处理大量数据时
--
下一个选项是使用
这就是将Ajax响应封装在函数中的本质,允许同步处理异步请求。听起来很复杂?如果您了解Ajax是如何工作的,就不太可能了
Ajax旨在为您向服务器发送异步请求提供一种方法。这意味着您的请求将绕过标准浏览器流
这是一个标准的“同步”请求,也是所有web浏览器的工作方式
设计的目的是让您能够收到对发送的每个请求的响应。例如,如果单击某个链接,实际上是指示浏览器向服务器发送请求,并将响应传递给服务器(以新网页的形式)
AJAX使您能够绕过这一点,增加了将请求发送到范围之外的能力。这样做的好处包括:动态页面更新、通知、页面上应用的新信息
大多数Ajax功能的问题是必须等待。由于异步,您无法将其添加到流中。。。简而言之,如果您有依赖功能,就没有办法“等待”
解决这个问题的方法是使用回调
这使您能够发送ajax请求并“等待”响应。这与设置“synchronous:true”相反,后者会冻结浏览器
如何解释服务器结果以停止定期ajax刷新 使用Ajax回调并等待响应 如果它太大,就把它分成几页(按照
@myst的回答)
如果您仍然认为可以ping您的服务器,并获得同一请求的多个响应,请再次阅读我写的内容。一个请求=一个响应。对不起,伙计,我投了反对票,因为这样做不实际。提供的信息太少,无法提供适当的反馈-请参阅
$(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)
});
});