揮発性のメモ2

http://d.hatena.ne.jp/iww/

ajaxでデータを取得したとき、データに不備を見つけたらエラー扱いにする

最近は ajaxの引数で .success とか .error は使っちゃいけないらしい。

// データをサーバから取得する関数
function getdata(command){
    return $.ajax({
        url: "test_command.php",   // リクエスト送信先URL
        type: "POST",
        data: {"command":command},
        dataType: 'json',
        timeout: 10000,
        cache:false
    }).then(disp_radio)    // 成功したらデータ表示。 doneではなくthenを使う
      .fail(show_err);     // 失敗したらエラー表示
}


// データを表示する関数
function disp_radio(json,status,xhr){
    if( json.data==undefined ){
        // 失敗を返す。 reject()の引数は .fail への引数になる
        return $.Deferred().reject(xhr,"error","データ不備発見").promise();
    }
    
    // データ表示処理は省略

    // 成功を返す。 resolve()の引数は 次の .done への引数になる
    return $.Deferred().resolve().promise();
}


// エラー時の関数
function show_err(xhr, textStatus,errorThrown){
    if(xhr.status=="200"){
        // JSONのパースエラーやデータ不備のときはこっち
        console.log(xhr.status + " " + textStatus + " " + errorThrown);
    }else{
        // HTTPエラーはこっち
        console.log(xhr.status + " " + xhr.statusText);
    }
}


// 呼び出す
getdata("test");

jQuery リファレンス:deferred.then

ポイントは done じゃなくて then を使うこと。
done のときは戻り値は不要だけど、 thenのときはきちんと返さなければならない



$.ajax() | jQuery 1.9 日本語リファレンス | js STUDIO

$.ajax() が .done() で関数に渡す引数
data 取得した本文。 HTMLとかJSONとか
status ステータス
xhr XMLHttpRequest。エラーステータスとか
$.ajax() が .fail() で関数に渡す引数
xhr XMLHttpRequest。エラーステータスとか
statusText 発生したエラーの型を示す文字列
errorThrown HTTPステータスのテキスト部分