Rails:"head:ok"解释为"ajax:error"

Rai*_*ana 28 jquery ruby-on-rails-3

可能重复:
jquery不会在$ .ajax上调用rails标准REST DELETE应答的成功方法

我响应远程链接(data-remote ="true"data-type ="json")和输出

format.json { head :ok }
Run Code Online (Sandbox Code Playgroud)

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

Status Code:200 OK
Run Code Online (Sandbox Code Playgroud)
...
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
...
Run Code Online (Sandbox Code Playgroud)

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

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

数据看起来像这样:

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

看起来对我很好......

问题

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

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

chr*_*nne 43

这里回答.

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

你可以让Rails响应,head :no_content它有一个空的身体或一个render :json=>true

这在Rails的讨论在这里.

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