ajax リクエストがランダムな 404/500 エラーを同時に (同期または非同期で) 多数呼び出したときに配信されないようにする適切な方法があるかどうか疑問に思っていました。
たとえば、500 ~ 800 人のデータを含むリストを表示するためのいくつかの行と列を持つ単純な html テーブル
行く方法:
- バックエンドからの選択 (組織単位を含む HTML フォーム) によって ppl を取得し、テーブルの最初の列に結果リストを書き込みます
- personId による各人のイベントの取得 (最初のリクエストの結果)
- 各人の属性を取得する
- 各人の役割を取得する
- 個々の属性、役割、およびイベントに応じて、各人のバックエンドから計算されたものを取得します。
疑似コード:
function createTableData(){
var selected;
var personIds;
//get personIds by selection and write them into table
object.executeJSONRequest(...,
{ _ts: new Date().getTime(),
input: selected
},function(data) {
// write result into table
// fill resourceIds with result param
},..);
getEvents(personIds);
getAttribtues(personIds);
getRoles(personIds);
calculateStuff(personIds);
}
function getEvents(personIds){
object.executeGetRequest('...',
{ _ts: new Date().getTime(),
ppl: personIds
},function(data) {
//add result to table
}
}
function getAttributes(personIds){...} //and so on..
これらすべてのメソッドを連続して呼び出すと、属性のロード中、ロールのロード中にランダムなエラーが発生することがあり、すべて正常に動作することもあります。
次のように、各 ajax 成功ブロックにネストされたものを呼び出す場合
function createTableData(){
object.executeJSONRequest(...
{ _ts: new Date().getTime(),
input: selected
},function(data) {
getEvents(..);
});
}
function getEvents(..){
object.executeGETRequest(...
{ _ts: new Date().getTime(),
input: selected
},function(data) {
getAttributes(..);
});
}
function getAttributes(..){ ...,function(data){ getRole(..)}); and so on
それはすべて正常に動作します。次のような解決策を試してみると
document.ajaxStart/Stop(function(){ //if table columns i expected are filled do next}
必要なテーブルの列がすべてデータで満たされているかどうかを確認する必要があります。
私が考えていない本当に適切な解決策はありますか?(jQuery Version 1.2 /IE V7-8 ^^)