web-dev-qa-db-ja.com

jquery ajaxの呼び出し-.fail vs.:error

どちらを使用すればよいですか?

どちらか一方を使用する理由はありますか?

エラー処理の方が良いですか?

$.ajax({
    url: url,
    data: { start: start, end: end }
}).done(function(data, textStatus, jqXHR) {
    $('#myElement').append(data);
}).fail(function() {
    // report error    
});

OR

$.ajax({
    url: url,
    data: { start: start, end: end },
    success: function(data, textStatus, jqXHR) {
        $('#myElement').append(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // report error
    }
});
70
PeteGO

2つのオプションは同等です。

ただし、promiseスタイルのインターフェイス(.fail()および.done())を使用すると、要求を作成するコードと応答を処理するコードを分離できます。

AJAXリクエストを送信してjqXHRオブジェクトを返す関数を作成し、その関数を他の場所で呼び出してハンドラーを追加できます。

.pipe()関数と組み合わせると、promiseスタイルのインターフェイスは、複数のAJAX呼び出しを行うときのネストを減らすのにも役立ちます。

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });
39
SLaks

これを刷新するために...

成功とエラーのアプローチは、jQuery 1.8で非推奨になりました。

jQuery Ajax

非推奨の通知:jqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックは、jQuery 1.8で非推奨になりました。最終的な削除のためにコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()、およびjqXHR.always()を使用します。

28
slohr

chainable deferred object promiseスタイルを使用すると、よりクリーンな構造と always の使用が可能になります。

let data = {"key":"value"}

$.ajax({
    type: 'PUT',
    url: 'http://example.com/api',
    contentType: 'application/json',
    data: JSON.stringify(data), 
}).done(function () {
    console.log('SUCCESS');
}).fail(function (msg) {
    console.log('FAIL');
}).always(function (msg) {
    console.log('ALWAYS');
});
1
ow3n