我是Rails 4中的新手。我想延迟HTTP响应。
我认为' respond_to'方法可以响应HTTP请求。
然而,当我删除了“回复”时。方法,rails控制器自动响应请求。
以下是我的步骤。
在视图中发送HTTP请求
[index.html.erb]
<script>
var ready = function() {
alert('this is function');
}
var aquery = function() {
$.ajax({
type : "POST",
url : "app/subaction",
});
}
$(document).on('ready page:load', aquery);
</script>
在Controller中接收HTTP请求
class AppController < ApplicationController
def subaction
(Nothing here...)
end
end
subaction.js.erb
$('#div_id').empty().append("Complete response ...");
在此步骤中,尽管没有&#34; respond_to&#34;方法
我可以延迟回复???你能解释一下rails中的请求 - 响应操作吗?
谢谢...
答案 0 :(得分:1)
Rails默认呈现响应的主要原因是because the documentation says so。 Rails遵循“约定优于配置”的理念,这意味着它会尝试以最小的方式帮助您保持编写的代码。大多数情况下,您希望控制器操作呈现视图,因此Rails会为您执行此操作。
您可以使用多种技术来延迟响应。最简单的方法是使用Ruby's sleep
method来引入延迟:
class AppController < ApplicationController
def subaction
sleep 3 # Wait for 3 seconds before responding
end
end
在测试应用程序在慢速Internet连接上的行为方式时,这可能很有用,但在生产代码中应该避免使用。快速应用程序让用户满意。
您还可以使用Rails 4.0.2中引入的the ActionController::Live
module。它允许您将数据流式传输到客户端,但使用流可能很棘手。 jQuery在触发回调之前等待响应完成,因此您必须use something else来处理流。
这类似于Websockets,一种新兴的流媒体标准。 Rails中有some support available for websockets,但浏览器并不普遍支持它。
另一种选择是将延迟切换到前端。您可以使用JavaScript的setTimeout
或setInterval
在延迟后调用一些代码:
setTimeout(function() {
alert("I run once, after 4 seconds");
}, 4000);
setInterval(function() {
alert("I run every two seconds");
}, 2000);
如果您尝试检查更新,可能会尝试使用setInterval
,但您可能会发现使用setTimeout
安排一次性检查更加灵活服务器。然后,您可以在服务器中包含一个时间延迟,指定再次询问之前等待的时间。