New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

h5.ajax()に自動リトライ機能を追加する #199

Closed
simdy opened this Issue May 7, 2013 · 1 comment

Comments

Projects
None yet
2 participants
@simdy
Member

simdy commented May 7, 2013

回線状況やサーバーの負荷状況等によっては、Ajax通信が失敗することがある。
これに対応するための通信自動リトライ機能を追加する。

リトライが行われた場合、commonFailHandlerはリトライを規定回数行った後に呼ばれる。
エラーオブジェクト(存在する場合)は、最後のリトライで発生したものを渡す。(リトライ途中のエラーは無視)

デフォルト設定:

  • リトライ回数:0(リトライしない)
  • リトライ間隔:500ms
  • リトライ条件:GETかつ回線接続に失敗した場合のみリトライ(ステータスコードにより判定。400,500等種類を問わず、サーバに接続してエラーが返ってきた場合はリトライしない。)

上記の各種設定はh5.settings.ajax.retryCount, retryInterval, retryFilter で設定する。
(retryFilterはFunction。)
また、h5.ajax()呼び出し時のオプションで同名パラメータを受け付け、デフォルト設定を
その呼び出しに限定して上書きすることができる。

settingsのデフォルト設定を変更すると、即時反映される(コードでは同パラメータを直接使う)。

また、h5.ajax()の戻り値のオブジェクトにretryProgress()メソッドを追加する。
このメソッドはリトライ行為の通知を受ける専用のメソッドであり、
これを使用するとリトライ状況を知ることができる。

@ghost ghost assigned fukudayasuo May 7, 2013

@simdy

This comment has been minimized.

Show comment
Hide comment
@simdy

simdy May 7, 2013

Member

似たようなパラメータとしてh5.settings.dynamicLoadingがある。

  • dynamicLoading:リソースの動的ロード時の動作パラメータ
  • ajax:h5.ajax()を直接呼び出したときの動作パラメータ

である。(dynamicLoadingの方は、h5.ajax()を直接呼び出した場合は一切適用されない。)

これを区別するのは、動的ロードは基本的にFWが内部で自動的に行うことが多い動作であるのに対し、
h5.ajax()はユーザーが使用するメソッドであるからである。
またその位置づけも、「リソースの取得=GET」のみを行う動的ロードと
「リソースの変更=POST」も行われるh5.ajax()とではリトライの可否状況も異なると考えるため。
(POSTの場合、二重送信防止などの観点から、一律にリトライしてよいとは限らない。)

Member

simdy commented May 7, 2013

似たようなパラメータとしてh5.settings.dynamicLoadingがある。

  • dynamicLoading:リソースの動的ロード時の動作パラメータ
  • ajax:h5.ajax()を直接呼び出したときの動作パラメータ

である。(dynamicLoadingの方は、h5.ajax()を直接呼び出した場合は一切適用されない。)

これを区別するのは、動的ロードは基本的にFWが内部で自動的に行うことが多い動作であるのに対し、
h5.ajax()はユーザーが使用するメソッドであるからである。
またその位置づけも、「リソースの取得=GET」のみを行う動的ロードと
「リソースの変更=POST」も行われるh5.ajax()とではリトライの可否状況も異なると考えるため。
(POSTの場合、二重送信防止などの観点から、一律にリトライしてよいとは限らない。)

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 8, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 8, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 8, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 9, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 9, 2013

fukudayasuo
#199 コード修正&テストを少し追加(途中)
・defaultAjaxRetryFilterの記述
 - リトライするかどうかはretryFilterで決める
・commonFailHandlerが正しく動作するよう修正。
・リファクタ

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013

fukudayasuo
#199 実装方法を変更。
jqXHRWrapperはjqXHRをプロトタイプではなく_jqXHRプロパティに持つようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 13, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 15, 2013

fukudayasuo
#199 h5.ajax.js をリファクタ。
test/h5.ajax.js 変数名を適切なものに変更

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 15, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 15, 2013

fukudayasuo
#199 jqXHRWrapper.promise()を使用するとバグっていたのでなおしました。
jqXHRWrapperにはerror,success,completeメソッドを持たせないようにしました。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo
#199 jQuery1.7.0でjqXHR.alwaysがpromiseを返すバグ(
http://bugs.jquery.com/ticket/10723 )
の対応をしました。(jqXHRWrapper.always()はjqXHRWrapperを返す)

リファクタ

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo
#199 リファクタ
jqXHRWrapperはdfd.promise(this)で自身をpromise化、
always,promiseだけ個別にオーバーライドするようにしました。
変数、関数名を適切なものに変更。

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013

fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 17, 2013

fukudayasuo
#199 テストケース修正。ajaxのデータを取得するとき、dataTypeを省略しないように直しました。
# Firefox以外は'text'、Firefoxではhtml(xmlかも)がデフォルトになっているため)

@simdy simdy closed this May 20, 2013

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment