0

データベース内のすべての画像を取得するためにajax呼び出しを行っています。返された画像IDごとに、ajax関数を呼び出して画像のサムネイルを取得します。

2つの配列img_arr、src_arrがあります。img_arrは最初のajax呼び出しによって返されたデータを格納し、src_arrは2番目のajax呼び出しのデータを格納します。

var img_arr=[],src_arr=[];
function get_all_images(){
    $.ajax({
        type: 'GET',
        url: 'get_all_images/',
        success: function(data){
            parsedData = jQuery.parseJSON(data);
            if(parsedData.length!=0){
                for(var i =0;i<parsedData.length;++i){
                    img_arr.push(parsedData[i]);
                    // console.log(img_arr.length);
                    $.ajax({
                        type: 'GET',
                        url: 'get_thumb/'+parsedData[i],
                        success: function(data){
                            src_arr.push(data);
                            //console.log(src_arr.length);
                        }
                    });
                }
            }
        }
    }); 
    console.log(img_arr.length);
    console.log(src_arr.length);
}

ただし、最後に両方の配列の長さで0を取得すると。しかし、ajaxのsuccessコールバック内の長さを出力すると、適切な長さの配列が得られます。成功コールバック後にデータを保存して使用する方法はありますか?

4

2 に答える 2

0

それは多くのサーバー側の呼び出しになります。

単なるアイデア:サーバー上のすべての画像とそれに関連付けられたサムネイルを取得してから、画像とサムネイルを取得するために ajax 呼び出しを 1 回だけ行ってみませんか?

于 2012-08-31T13:36:07.600 に答える
0

console.log を使用してコードの最後の行に到達すると、これらの ajax 呼び出しはまだ返されていません。そのため、配列の長さはすべてゼロです。あなたの成功関数はコールバックです。つまり、ajax 呼び出しがサーバーに送信され、サーバーがその応答をブラウザーに返すまで、コードは実行されません。その間、コードは待たずに続行します。そのため、多数のリクエストを送信しましたが、ほぼ確実に、いずれかが返される前に console.log 行にヒットします (数百または数千のリクエストがない限り)。

いずれにせよ、小さな要求をたくさんするのではなく、これらをまとめてくださいという前のポスターに同意します. サーバーに負荷をかけ始めると、サーバーは感謝します。

于 2012-08-31T13:50:35.647 に答える