28

重複の可能性:
jquery は、Rails 標準 REST DELETE 回答の $.ajax で success メソッドを呼び出さない

リモートリンク(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ステータスコードはエラーと見なされます。

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

これについては、Railsのここで説明されています。

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

于 2012-10-05T17:34:44.920 に答える