2012-08-31 42 views
0

我正在調用ajax來獲取數據庫中的所有圖像。 對於每個返回的圖像ID,我調用一個ajax函數來獲取圖像的縮略圖。跨多個ajax調用存儲數據

我有兩個陣列img_arr,src_arrimg_arr存儲第一個ajax調用返回的數據和src_arr存儲第二個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的成功回調中打印長度時,我得到了適當長度的數組。成功回調之後是否有方法來存儲和使用數據?

+0

不知道我明白了,你使用ajax GET請求來獲取圖像嗎? – adeneo

回答

0

這將是一個很大的服務器端調用,

只是一個想法:爲什麼不乾脆讓所有的圖像與服務器上的相關的縮略圖,然後就做一個Ajax調用讓你的圖像+大拇指回來?

0

當你用console.log命中你的代碼的最後一行時,那些ajax調用都沒有返回。這就是爲什麼數組都具有零長度。您的成功函數是一個回調函數,這意味着代碼不會運行,直到ajax調用發送到服務器,然後服務器已將其響應發送回瀏覽器。同時,你的代碼不會等待,它會繼續。所以它發出了一堆請求,但幾乎可以肯定的是,它們之前有任何請求返回(除非有成千上萬個請求),否則它會觸發console.log行。

無論如何,我同意上一張海報,您應該嘗試將這些打包捆綁起來,而不是發出一堆小小的請求。當你開始加載時,你的服務器會感謝你。