jQuery.ajax()

  • このエントリーをはてなブックマークに追加

jQuery.ajax()の戻り値

jQuery.ajax()の戻り値はjqXHRオブジェクトである。
jqXHRオブジェクトに対してdoneメソッドとfailメソッドを使用して
サーバが返すデータ等を見ることができる。
done()メソッドの引数は成功時のコールバック関数であり、通常はデータが渡される。
一方、fail()メソッドの引数は失敗時のコールバック関数であり、通常はエラー情報が渡される。
jQuery.ajax([settings])のsettingsはAjaxリクエストを設定することができる。このsettingは省略可能な設定項目である。



jqXHR.done()
jqXHR.done(function(data, textStatus, jqXHR) {});は「An alternative construct to the success callback option」(success callback optionの代替構成)とjQuery公式webサイトに載っている。
つまり、jqXHR.done(function( data, textStatus, jqXHR){});はsettingsの設定項目successと同じくAjaxリクエストの成功時の処理を書くことできる。
settingsの設定項目successに設定する関数の引数(data, textStatus, jqXHR)とjqXHR.done(function(data, textStatus, jqXHR){});のコールバック関数の引数は同じということを意味する。

success
Type: Function(Anything data, String textStatus, jqXHR jqXHR)
settingsの設定項目succeessにリクエストに成功した場合に呼び出される関数を設定できる。
次のように設定する。


$.ajax({
  url: "example.com",
  success: function(data, textStatus, jqXHR) {
    // 成功時の処理
  }
})

jqXHR.fail()
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});は「An alternative construct to the error callback option」(error callback optionの代替構成)とjQuery公式webサイトに載っている。
つまり、jqXHR.fail(function(data, textStatus, jqXHR) {});はsettingsの設定項目errorと同じくAjaxリクエストの失敗時の処理を書くことできる。
settingsの設定項目errorに設定する関数の引数(jqXHR, textStatus, errorThrown)とjqXHR.fail(function( jqXHR, textStatus, errorThrown){});のコールバック関数の引数は同じということを意味する。

error
Type: Function( jqXHR jqXHR, String textStatus, String errorThrown)
settingsの設定項目errorにリクエストに失敗した場合に呼び出される関数を設定できる。
次のように設定する。


$.ajax({
  url: "example.com",
  error: function(jqXHR, textStatus, errorThrown) {
    // 失敗時の処理
  }
})

jqXHR.done(function(data, textStatus, jqXHR){});
doneメソッドに渡すコールバック関数の3つの引数について

data
サーバが返すデータ(test.txtの中身)が
dataTYpeに沿ってフォーマットされた値が格納されている。

textStatus
通信結果が文字列「success」で返ってくる。

備考
doneは正常終了した場合に実行されるので文字列「success」しか返らないはず。私は「success」が出る時しか確認していない。

jqXHR
jqXHRオブジェクト

jqXHR.fail(function(jqXHR, textStatus, errorThrown){});
failメソッドに渡すコールバック関数の3つの引数について

jqXHR
jqXHRオブジェクト

textStatus
通信結果が文字列「timeout」、「error」、「abort」、「parsererror」で返ってくる。

備考
jQuery公式webサイトのsettingの「error」を見ると「Possible values for the second argument (besides null) are “timeout”, “error”, “abort”, and “parsererror”. 《第2引数でとりうる値(NULL以外)は、「timeout」、「error」、「abort」、「parsererror」である。》」
とあったが、通信結果が「null」の場合もあるのか?私は文字列「error」が格納される時しか確認していない。

errorThrown
HTTPエラーが発生すると、「Not Found」や「Internal Server Error」などの HTTPステータスのテキスト部分を受け取る。
(HTTP/2 では代わりに空の文字列になる場合があります)

備考
jQuery公式webサイトを見ると
error
Type: Function( jqXHR jqXHR, String textStatus, String errorThrown)
The function receives three arguments:The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred.
《この関数は3つの引数を受け取ります。jqXHRオブジェクト(jQuery 1.4.xではXMLHttpRequestオブジェクト)、発生したエラーの種類を示す文字列、およびオプションの例外オブジェクト(存在する場合)。》

“if one occurred”は「オプションの例外オブジェクトが発生した場合」という意味である。つまり、例外オブジェクトが存在するかどうかに応じて、3番目の引数が渡されるかどうかが変わる。
「String errorThrown(文字列errorThrown)」と書いてあるが、「an optional exception object(オプションの例外オブジェクト)」とも書いてあり、矛盾しているように思える。
私はerrorThrownに文字列「Not Found」が格納される時だけ確認した。
errorThrownがオブジェクトの場合がありえるのか?

jqXHR
jqXHRオブジェクト
The jQuery XMLHttpRequest (jqXHR) object returned by $.ajax() as of jQuery 1.5 is a superset of the browser’s native XMLHttpRequest object.
(jQuery1.5以降の $.ajax() が返す jQuery XMLHttpRequest (jqXHR) オブジェクトは、ブラウザのネイティブ XMLHttpRequest オブジェクトのスーパーセットです。)
とjQuery公式webサイトに書いてある。
ここでjQuery公式webサイトで言いたいことは、jQuery.ajax()メソッドを使用して行われるAjaxリクエストの結果として返されるjqXHRオブジェクトは、ブラウザのネイティブXMLHttpRequestオブジェクトを拡張したものであり、機能のスーパーセットとなる。
XMLHttpRequestオブジェクトのスーパーセット(上位集合)がjqXHRオブジェクトである。

The jqXHR objects returned by $.ajax() as of jQuery 1.5 implement the Promise interface, giving them all the properties, methods, and behavior of a Promise (see Deferred object for more information).
(jQuery 1.5以降の$.ajax()が返すjqXHRオブジェクトは、Promiseインターフェースを実装しており、Promiseのすべてのプロパティ、メソッド、動作を提供します(詳細は「Deferredオブジェクト」を参照)。)
とjQuery公式webサイトに書いてある。
このPromiseインターフェースがいまいち理解できていないから勉強する必要がるな。
「Promiseインターフェースが実装」という言い方するのか?

doneメソッドとfailメソッドを使った例を次に示す。


$.ajax({
  type: 'POST',
  url: 'test.txt',
  dataType: 'text'
}).done(function(data, textStatus, jqXHR) {
  console.log(data);
  console.log(textStatus);
  console.log(jqXHR);
}).fail(function(jqXHR, textStatus, errorThrown){
  console.error("jqXHR.status = " + jqXHR.status + ",textStatus = " + textStatus + ",errorThrown = " + errorThrown);
});

参考
jQuery.ajax() | jQuery API Documentation ExternalLink
JavaScriptがちょっとわかる人向けの、Ajaxの話。 – Qiita ExternalLink
$.ajax() | jQuery 1.9 日本語リファレンス | js STUDIO (studio-kingdom.com) ExternalLink





  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*