跨多个ajax调用存储数据

时间:2012-08-31 13:29:17

标签: jquery ajax get

我正在进行ajax调用以获取数据库中的所有图像。 对于返回的每个图像id,我调用ajax函数来获取图像的缩略图。

我有两个数组 img_arr,src_arr img_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的成功回调中打印长度时,我获得了适当长度的数组。有成功回调后存储和使用数据的方法吗?

2 个答案:

答案 0 :(得分:0)

这将是很多服务器端调用,

只是一个想法:为什么不在服务器上获取所有带有关联缩略图的图像,然后只需进行一次ajax调用即可获得图像+拇指?

答案 1 :(得分:0)

当您使用console.log搜索代码的最后一行时,尚未返回任何ajax调用。这就是阵列全长为零的原因。您的成功函数是回调,这意味着代码不会运行,直到ajax调用发送到服务器,然后服务器已将其响应发送回浏览器。与此同时,您的代码不会等待,它会继续。所以它发出了一堆请求,但几乎可以肯定它会在任何一个请求返回之前点击console.log行(除非有数百或数千个请求)。

无论如何,我同意上一张海报,你应该尝试捆绑这些,而不是提出一堆小请求。当你开始加载它时,你的服务器会感谢你。