0

サーバー側への AJAX 呼び出しを行う 2 つの JavaScript ループがあり、一方が他方にネストされています。.getJSON()ループは数値 (latlng 座標) のペアを生成し、MySQL テーブルに挿入される場所を介してサーバーに渡されます。

問題:スクリプトは約 6 分間実行され、合計 13200 の AJAX 呼び出しが行われます。Chrome の webdeveloper ツールでは、5656/13646 requests 536.20KB/2.15MB. 挿入されたエントリのテーブルを確認すると、5655 行しか表示されません。残りはどうなりましたか?

JS コード

for(var i = 0; i < 110; i++) {
    var lat_current = lat_start + lat_increment * i;

    for(var j = 0; j < 120; j++) {

        // Do some calculations
        // More code here...

        // Insert LatLng into database
        $.getJSON(base_url + 'insert_latlng_to_crawl', 
            {
                lat: lat_current,
                lng: lng_current
            }, 
            function(json){
            });

    }

}   
4

2 に答える 2

1

戻り値をカウントしている可能性があります。

5655/13200

5655 はあなたが送信したもので、/ の後の数字は合計です (これには最初の数字の 2 倍の戻り値が含まれます)。送受信された json 値。ある種の成功ステータスを想定していますか?

また、テーブルに重複する値がいくつ挿入されているかという問題もあります。テーブルに一意のキーがありますか?

于 2012-06-04T22:01:52.170 に答える
1

JavaScript オブジェクトを作成し、それをサーバーに渡してサーバー側で処理する必要があります。

 var coords=Array();//Create an array to store the calculations
 for(var i = 0; i < 110; i++) {
    var lat_current = lat_start + lat_increment * i;

    for(var j = 0; j < 120; j++) {

    // Do some calculations
    // More code here...

    // append the results to the array
    coords.push({lat: lat_current, lng: lng_current});


}

//Make the ajax call to the server, sending the completed Array JSON encoded
coords= JSON.stringify(coords);
$.ajax({
  type: 'POST',//you should send big chunks of data via POST
  url: url,
  data: coords,
  success: success,
  dataType: JSON
});
于 2012-06-04T22:17:37.740 に答える