2012-04-06 14 views
3

から悪い状態コードのためのクリーンハンドリング私は非常に単純なAjaxのリクエストがありますjQueryの:AJAX

$.get(url, data) 
    .done(function() { }) 
    .fail(function() { }) 

urlにエラーがある場合、それは例えば「500」のようなステータスコードを返します。どうやら、jQueryは.failではなく.doneを実行するので、jqxhrオブジェクトの約束をこの時点で考えています。私の質問は2倍です:

デフォルトでは、.failがajaxに対してトリガーされ、このデフォルトを変更する方法はありますか?

第二に、不正な要求のための特別な処理を持っているための唯一の方法のようなもののようだ:「?悪い」と考えられる回答を見つけて対処するより良い方法はあり

.done(function (msg, tm, jqxhr) { 
    if (jqxhr.status < 200 || jqxhr.status >= 300) performFailure(); 
}); 

jQueryの.get()ドキュメントから

答えて

0

さらに、このに見た後、jQueryのは正しく.fail()を使用し、実際にしているようです。問題は、私のサーバーが特定のエラーで200を出していたことです。言い換えれば、これはjQueryの問題ではありません。

0

:スクリプトは、グローバル.ajaxError(と呼ばれていない限り、

jQuery.get(と要求した場合)は、エラーコードを返すそれは黙っ を失敗します) 方法。また、jQuery.get()によって返された jqXHRオブジェクトの.error()メソッドは、jQuery 1.5以降、エラー の処理にも使用できます。

(強調鉱山)

私はエラー処理で多くのことを行っていないが、あなたは、エラー状態からバブルへajaxErrorを呼び出す必要がありますように聞こえます。

+0

'.fail'と' .error'はjqxhrオブジェクトと同じメソッドで、私はそれを使用しています。ステータスコードに関係なく '.done'が実行されます(' .success'と同じです)。これは私にとっては意図的なようです。ところで、私はjQuery 1.7を使用しています。 –

+0

.errorと.failの使用を提案していませんでした。私はエラーコードが黙って失敗することを指摘していました。私の答えにイタリック体のテキストを見てください。 error/failブロックに入るには、スクリプトコール.ajaxError()が必要です。 – veeTrain

+0

が間違っています –

0

.ajax関数のドキュメントをチェックしてください。エラーのための非常に素晴らしいハンドラがあります:http://api.jquery.com/jQuery.ajax/ get()の代わりにこの関数を使いたいかもしれません。 (この2つは本質的に同じです。このページからわかるように:http://api.jquery.com/jQuery.get/);

あなたのコードを持つ例は次のようになります。

 $.ajax({ 
     url: url, 
     data: data, 
     error: /*error function*/, 
     success: /*success function*/, 
    }); 
+0

これはエラー処理を変更しません。実際に起こることは、実際には同じです。 –

+0

.done()と.fail()のバインディングを削除しましたか? – Jlange

+0

URLがエラーコードを返すと、返されたエラー関数はこのエラー(jqXHR、textStatus、errorThrown)のように見えます。正しく処理する必要のある情報が含まれている必要があります – Jlange