繁体   English   中英

javascript响应未解析为状态码4xx

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM