質問: 現在AjaxでリモートAPIのデータを取得し、その結果データの内容に応じてJquery Toastのステータスを変更しようと考えています。 Dataの中身は通常のテキストメッセージが返却されるため、エラーなのか正常なのかを現時点では判断ができないため、識別できるように値とメッセージを入れて返却するように修正しようと思っているのですが、その値の特定の部分の中身をみて、toastrに渡す方法がよくわかりません。 ``` $.ajax({ type: "POST", url: "/api", data: data, success: function(data, dataType) { toastr.success(data) }, error: function(XMLHttpRequest, textStatus, errorThrown) { toastr.danger('Error : ' + errorThrown); } }); ``` 例えば、DATAの値に以下の様な文字列を返却できるようにし、先頭のステータス文字を、toastr実行時の値として利用するようなことを考えています。 success:正常に完了しました。 danger:エラーが発生しました。 toastr.$status(data) ※$statusの中にsuccessやdangerを入れる等。 もう少しシンプルな実装方法やベストなナレッジがあればアドバイス頂けると助かります。 宜しくお願いします。
回答: API側を自由に修正できるのでしたら、返却するのは文字列ではなく、JSON形式などオブジェクトを持てる形式で返却する形にした方がよいと思います。 API側からは、`code`,`message`等を持たせたオブジェクトデータを返却してあげて、文字列判定ではなくオブジェクトのそれぞれの値をクライアント側で判定してあげた方があとあと幸せになれると思います。 なお、jQueryの`$.ajax`のerrorコールバックに入るのはあくまで通信に失敗した場合などに発生するクライアント起因のエラーのみですので、API側で発生したいわゆるアプリケーションエラーは拾えません。 ``` $.ajax({ type: "POST", url: "/api", data: data, success: function(data, dataType) { var json = JSON.parse(data); if (json.code == 0) { // code=0の場合はエラーなし toastr.success(json.message); } else { toastr.danger('APIエラー : ' + json.message); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { toastr.danger('Error : ' + errorThrown); } }); ``` サーバーサイド(イメージ) ``` 0, 'message' => '正常です')); } else { // エラー時 echo json_encode(array('code' => 1, 'message' => 'エラーです')); } ```