最近は 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");
ポイントは 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ステータスのテキスト部分 |