web-dev-qa-db-ja.com

Rails:「ajax:error」として解釈される「head:ok」

可能性のある複製:
jqueryはRails標準REST DELETE回答の$ .ajaxで成功メソッドを呼び出しません

リモートリンクに応答します(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 );
  });

dataは次のようになります:

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

よさそうだ...

問題

ajax:successの代わりに、jQuery(jquery-ujs)ajax:errorそしてエラーが出されないので、なぜか分かりません。

私は多くの議論を調査しましたが、この方法は常に問題ではなく解決策であるように見えました。助けてくれてありがとう!

28
Railsana

回答済み ここ

jQueryはJSON応答を期待しています。 "head:ok"には応答本文用のスペースが1つあるため、jQueryはJSON応答の解析に失敗するため、200ステータスコードはエラーと見なされます。

空のボディがあるhead :no_contentまたはrender :json=>trueでRails応答することができます

これはRails here で議論されました。

Rails)のhead :okに単一のスペースがある理由は、古いSafariバグの回避策です。

43
chris finne