![](/img/trans.png)
[英]Parsing JSONP Response in Javascript when 4xx or 5xx Http Error Code is Present
[英]javascript response not parsed with status code 4xx
我在控制器中执行以下操作:
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先决条件失败 。
现在,当我更改状态代码时,它不再执行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
并且正文仍然是alert("error");
。 但是,它不会发出警报。
这是浏览器限制(我使用Firefox 7b ),还是可以使其与rails一起使用?
如果要执行我的JavaScript,是否必须始终使用200
?
每个状态码都有其含义,并且200表示请求已成功完成。 当您获取其他4xx或5xx代码时,这意味着那里存在一些错误,并且脚本未运行/未返回成功的响应。 在这种情况下,您不应期望获得相同的输出,但是,如果您的请求出了点问题,则可以在Javascript代码中处理这种情况,并显示一些有意义的消息。
如果200
以外的任何其他东西引起麻烦,为什么不就把它退回去。 除非他们正在深入研究HTTP标头,否则没人会真正看到响应代码。
我不知道为什么它不起作用,但老实说,您不应该对自己感到困难。
毕竟,HTTP请求成功了,所以HTTP响应200
确实非常合适。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.