Rails:“head:ok”解释为“ajax:error”

时间:2012-09-13 13:23:01

标签: ruby-on-rails-3 jquery

  

可能重复:
  jquery doesn’t call success method on $.ajax for rails standard REST DELETE answer

我回复远程链接(data-remote =“true”data-type =“json”)并输出

format.json { head :ok }

在我的Rails(3.2.6)控制器中,它创建了这个标题:

Status Code:200 OK

...
Connection:keep-alive
Content-Length:1
Content-Type:application/json; charset=utf-8
Server:thin 1.4.1 codename Chromeo
Set-Cookie: ... path=/; HttpOnly
X-UA-Compatible:IE=Edge
...

在我的JavaScript文件中 ajax:完成会被触发并输出 200 (data.status)

  $( '#myElement' ).on( 'ajax:complete', function( e, data ) {
    console.log( data.status );
  });

数据如下所示:

 ...
 readyState: 4
 responseText: " "
 setRequestHeader: function ( name, value ) {...
 state: function () {...
 status: 200
 statusCode: function ( map ) {...
 statusText: "OK"
 ...

对我来说非常好......

问题

而不是 ajax:成功,jQuery (jquery-ujs)执行 ajax:错误,我不知道为什么没有错误给出。

我已经研究了很多讨论,但这种方式似乎总是解决方案,而不是问题。谢谢你的帮助!

1 个答案:

答案 0 :(得分:43)

已回答here

jQuery期待JSON响应。 “head:ok”为响应主体提供了一个空间,因此jQuery无法解析JSON响应,因此它仍然认为200状态代码是错误的。

您可以让Rails回复head :no_content,其身体为空或render :json=>true

这已在Rails here中讨论过。

Rails中head :ok中单个空格的原因是旧的Safari bug中的一种解决方法。