28

可能重复:
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我不知道为什么,因为没有给出错误。

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

4

1 回答 1

44

在这里回答。

jQuery 期待 JSON 响应。“head :ok” 响应正文有一个空格,因此 jQuery 无法解析 JSON 响应,因此它仍然认为 200 状态代码是错误的。

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

这在 Rails 中讨论

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

于 2012-10-05T17:34:44.920 回答