8

jQueryのAJAX.fail()は、「404 Not Found」エラーなどを処理する優れたエラーハンドラーですが.done()、ユーザーから提供されたデータが正しくない場合など、一般的なエラーケースを処理するために、内部から意図的に呼び出すにはどうすればよいでしょうか。

4

2 に答える 2

11

それぞれの場合で、エラー時に呼び出される共通の関数を使用できます。

$.ajax( 'url' )
    .done( function( data, textStatus, jqXHR ) {
        if( data == 'Invalid' ) {
            ajaxError( jqXHR, "usererror" );
        }
    })
    .fail( ajaxError );

function ajaxError( jqXHR, textStatus, errorThrown ) {
    console.log( 'Ajax error: ' + textStatus );
}
于 2013-03-10T08:22:17.960 に答える
3

@Juhanaのコードは、ほとんどの場合に適しています。

ただし、単独の検査では確実に予測できないエラーが発生する可能性がある場合は、次のdataバリアントを検討してください。

$.ajax( 'url' ).done( function( data, textStatus, jqXHR ) {
    try {
        var dataLooksGood = ......;//(boolean) Test data for predictable data errors here
        if( !dataLooksGood ) throw( new Error("data invalid"); )
        //Handle data here.
        //Any naturally-ocurring errors or further manually-thrown errors will be caught below.
    }
    catch(err) {
        ajaxError( jqXHR, "AJAX successful but: " + err.message );
    }
}).fail( ajaxError ).always(function() {
    //Here do whatever is necessary after success or error
});


function ajaxError( jqXHR, textStatus, errorThrown ) {
    console.log( 'AJAX error: ' + textStatus );
}

エラーをキャッチするalwaysことで、予期しないエラーが発生した場合でもハンドラーを起動できます。したがって、エラーが発生したかどうかに関係なく、「読み込み中...」メッセージまたはスピナー グラフィックが強制終了されたことをより確実に保証できます。

于 2013-03-10T15:58:52.060 に答える