【发布时间】:2011-11-10 02:14:06
【问题描述】:
我在我的控制器中执行以下操作:
def publish
respond_to |format|
format.js do
if allowed_to_publish then
render :js => 'alert("successful");'
else
render :js => 'alert("error");'
end
end
end
end
客户端通过 ajax 请求访问方法。到目前为止,这很好用,唯一让我烦恼的是,响应的状态代码始终是“200”。
当出现错误且无法完成请求时,根据错误类型应为 4xx 或 5xx 响应。就我而言,publish 可能会在用户未输入所有必需的详细信息时出错。我认为正确的状态码是412 precondition failed。
现在,当我更改状态代码时,它不再执行 javascript:
def publish
respond_to |format|
format.js do
if allowed_to_publish then
render :js => 'alert("successful");'
else
render :js => 'alert("error");', :status => 412
end
end
end
end
客户端得到相同的响应,但状态码,不再执行 javascript。响应头如下:
Date Sun, 04 Sep 2011 12:29:58 GMT
Server Apache/2.2.14 (Ubuntu)
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.8
X-UA-Compatible IE=Edge
Cache-Control no-cache
X-Runtime 0.176543
Status 412
Strict-Transport-Security max-age=172800, includeSubDomains
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/javascript; charset=utf-8
body 仍然是 alert("error");。但它不会发出警报。
这是浏览器限制(我使用的是 Firefox 7b),还是可以使其与 rails 一起使用?
如果我想让我的javascript被执行,我必须总是使用200吗?
【问题讨论】:
标签: javascript ajax ruby-on-rails-3 http-headers ruby-on-rails-3.1