0

我正在进行 ajax 调用以获取数据库中的所有图像。对于返回的每个图像 id,我调用一个 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 的成功回调中打印长度时,我得到了正确的数组长度。成功回调后有没有办法存储和使用数据?

4

2 回答 2

0

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

只是一个想法:您为什么不直接在服务器上获取所有图像及其相关缩略图,然后进行一次 ajax 调用来获取您的图像+拇指?

于 2012-08-31T13:36:07.600 回答
0

当您使用 console.log 访问代码的最后一行时,这些 ajax 调用都没有返回。这就是为什么数组的长度都为零的原因。您的成功函数是一个回调,这意味着代码不会运行,直到 ajax 调用发送到服务器,然后服务器将其响应发送回浏览器。同时,您的代码不会等待,它会继续。所以它发出了一堆请求,但几乎可以肯定的是,它在任何一个请求返回之前就到达了 console.log 行(除非有成百上千个请求)。

无论如何,我同意之前的发帖者,您应该尝试将这些捆绑在一起,而不是提出一堆小请求。当您开始加载它时,您的服务器会感谢您。

于 2012-08-31T13:50:35.647 回答