Skip to content
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
Closed

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

simdy opened this issue May 7, 2013 · 1 comment
Assignees
Milestone

Comments

@simdy
Copy link
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
Copy link
Member Author

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
・defaultAjaxRetryFilterの記述
 - リトライするかどうかはretryFilterで決める
・commonFailHandlerが正しく動作するよう修正。
・リファクタ
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 10, 2013
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
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
jqXHRWrapperにはerror,success,completeメソッドを持たせないようにしました。
fukudayasuo pushed a commit to hifive-labs/hifivemain that referenced this issue May 16, 2013
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
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
# Firefox以外は'text'、Firefoxではhtml(xmlかも)がデフォルトになっているため)
@simdy simdy closed this as completed May 20, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants