2012-02-12 15 views
3

ここにアドバイスが必要です。Ajaxコールループ、Ajax jQuery

私はこの状況を抱えて、JSONデータを取得しようとしましたが、AJAX(jQueryを使用)を考えました。

アイデアは、私が必要とするすべてのデータを取得するために、より多くのデータを必要とし、1〜2回のAjaxコールが必要です。

したがって、私は複数のAjaxコールを作成する必要があり、そのベストプラクティスを実行する最良の方法を見つけようとします。

var dataArr = { 
    page:0, 
    pageSize : 1000 
}; 


var StoreData = []; 

var getSomeData = function() { 

    $.ajax({ 
     type : "GET", 
     url : URL, 
     data : dataArr, 
     dataType : "json", 
     error : OnLoadError, 
     success :function(data, status){ 

      StoreData.push[data]; 
      if(data.length){ 
       dataArr.page = dataArr.page + 1 
       getSomeData(); 
      } 

     } 
    }); 
}; 

追加情報:

私の頭の中で最初に来た

ひとつのアイデアは、この(それは今のロジックを探して、いくつかの構文errosまたはさらに悪い何かを持つことができる)のようなものです

Ajaxを呼び出すと、(4000-9000個の)すべてのデータをgettすることができます。

私はpageSize : 1000をテストして正常に動作するため、通話あたり1000アイテムが確実に得られます。

あなたはいくつかのアドバイスで私を助けることができるのであれば、既存の1またはそれを行うための別のより良い方法、あるいはいくつかの例ではいくつかの変更は、私は本当に

おかげでみんなに感謝!

答えて

1

終了時にサーバーサイドにフラグを設定し、それを成功関数のステータスパラメータに入れることができます。それはあなたのコードをきれいにするでしょう。それ以外の場合は、単にwhileループを追加し、呼び出しを同期として定義し、ループ条件内で終了しているかどうかを確認します。

+0

私はちょうどクライアントのサイトを使用することができます、残念なことに – AlexC

+0

あなたのアプローチは全く間違っているようです。最後に余分なリクエストが1つだけあります。 ajax呼び出しを実際に実行する前に条件を追加して、それを回避してください。 //更新 - 私はちょうどあなたが傾けることができないと考えました。 – danwit

+0

[OK]をクリックすると、事実に直面することができます。未定義のリクエストがある場合は、最後のパッケージがあるかどうかを示すサーバーサイドレポートはありません。私はあなたのように、余分な要求を追加するよりも良いアイデアはありません。しかし、ちょっと、それはあなたのサーバーではない場合は、心配する必要はありません右か? ;) – danwit

0

まず、ページサイズを最適化する必要があります。それを1000と定義するのは簡単な方法です。アプリケーションのパフォーマンスが重要でない場合は、この回答の残りの部分を読んではいけません。

私は試行錯誤に基づいたアプローチを提案します。 forループを作成し、ページサイズ(20,50,100,500,1000,1500など)に異なる数字を試してみてください。次に、各ページサイズの要求のログ数、およびすべての要求の合計時間。これらの数値を比較し、ページサイズを賢明に選択してください。

第2に、サーバーからの要素の数を数えることができれば、最後に不要な要求を送信する必要はないかもしれません。 4650データを取得しているとします。 1000、+ 1000、+ 1000、+ 1000、+650が得られます。何とかあなたが1000未満になっていることを理解したら、最後のリクエストを送信しないでしょうか?レスポンスのフォーマットのようなものであると仮定します

<li class='item'>XXX</li> 
// All list items 
<li class='item'>YYY</li> 

はその後リーのjQueryを使っての数をカウントし、それはあなたのページサイズよりも小さい場合、それはあなたが必要なすべてのデータを得ることを意味します。

最後に、合計データの長さが4000を超えることがわかっている場合は、最初の4つの要求を非同期に送信することができます。