質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

2646閲覧

Ajaxで取得した内容に応じてtoastrの種別を分けたい

ashly

総合スコア119

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2017/02/17 03:50

現在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を入れる等。

もう少しシンプルな実装方法やベストなナレッジがあればアドバイス頂けると助かります。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

$.ajaxのerrorはajax(xhr)自体にエラーが発生した場合に呼ばれますので気を付けてください。

APIは大抵の場合JSONでレスポンスを返すように実装されています。
そして、サーバー側の処理でエラーが発生した場合は、JSON内にerrorといったキーをつけて、その値にメッセージやステータスコード、もしくはエラーに関する情報をまとめたオブジェクトにして返すのが一般的かと。

javascript

1$.ajax({ 2 type: 'POST', 3 url: '/api', 4 dataType: 'json', 5 success: function(data) { 6 if(data.error) { 7 toastr.danger('Error : ' + data.error); 8 } else if(data.success) { 9 toastr.success('Success : ' + data.success); 10 } 11 }, 12 error: function(XMLHttpRequest, textStatus, errorThrown) 13 { 14 toastr.danger('Ajax Error : ' + errorThrown); 15 } 16}

投稿2017/02/17 04:08

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ashly

2017/02/17 06:15

ありがとうございます。こちらのコードも大変参考になりました。
guest

0

ベストアンサー

API側を自由に修正できるのでしたら、返却するのは文字列ではなく、JSON形式などオブジェクトを持てる形式で返却する形にした方がよいと思います。
API側からは、code,message等を持たせたオブジェクトデータを返却してあげて、文字列判定ではなくオブジェクトのそれぞれの値をクライアント側で判定してあげた方があとあと幸せになれると思います。

なお、jQueryの$.ajaxのerrorコールバックに入るのはあくまで通信に失敗した場合などに発生するクライアント起因のエラーのみですので、API側で発生したいわゆるアプリケーションエラーは拾えません。

javascript

1$.ajax({ 2 type: "POST", 3 url: "/api", 4 data: data, 5 success: function(data, dataType) { 6 var json = JSON.parse(data); 7 if (json.code == 0) { // code=0の場合はエラーなし 8 toastr.success(json.message); 9 } else { 10 toastr.danger('APIエラー : ' + json.message); 11 } 12 }, 13 error: function(XMLHttpRequest, textStatus, errorThrown) { 14 toastr.danger('Error : ' + errorThrown); 15 } 16});

サーバーサイド(イメージ)

php

1<?php 2if (no_error) { 3 // 正常時 4 echo json_encode(array('code' => 0, 'message' => '正常です')); 5} else { 6 // エラー時 7 echo json_encode(array('code' => 1, 'message' => 'エラーです')); 8}

投稿2017/02/17 04:11

nayuneko

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ashly

2017/02/17 06:14

ありがとうございます。API側で返却するものをJSON形式にして、CODEの部分をパースして判定するようにしたところ、無事にうまくいきました! サンプルコードも頂き大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問