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

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

我响应远程链接(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:complete被触发并输出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:success ,jQuery (jquery-ujs)执行ajax:error ,我不知道为什么没有给出错误。

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

这里回答。

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

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

这在Rails中讨论过。

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