检查是否存在X个图像并将它们放入数组中

时间:2013-08-16 14:47:13

标签: jquery ajax arrays

我尝试使用jQuery检查我的域中是否存在图像,然后将它们放入数组中。 我有那个代码:

jQuery(document).ready(function($) {
    var images = new Array();
    var flag = true;
    var i = 0;
    var x = 1;
    while(flag) {
        $.ajax({
            url:'http://localhost/testImages/images/picture-1-' + x + '.jpg',
            type:'HEAD',
            error: function() {
                flag = false;
                return flag;
            },
            success: function() {
                images[i] = '<?php echo $productSlug . "-1-"; ?>';
                images[i] += x + '.jpg';
                return images[i];
            }
            i++;
            x++;
        });
        alert(flag);
    }
});

当我运行页面时,我必须强制关闭firefox,因为我在加载费用时遇到了一些错误。我有警报(标志)来知道该变量的状态并等待错误。我尝试评论while循环并替换&#39; x&#39;对于我的图像名称中不存在的数字,并且标志变量始终返回true。

我认为问题出在ajax代码中,但我没有多少经验。

2 个答案:

答案 0 :(得分:0)

语法不好。

        i++;
        x++;

应该在success函数内。此外,你的while循环永远不会停止,直到其中一个请求是错误,这可能会也可能不会发生。

为了确保您尝试执行的操作,您必须在请求中“阻止”代码,使其同步。使用async:false作为ajax参数的一部分。

答案 1 :(得分:0)

你能试试吗?我认为将增量移动到成功回调中可能会有所帮助。我想你也只需要一个。

while(flag) {
        $.ajax({
            url:'http://localhost/testImages/images/picture-1-' + x + '.jpg',
            type:'HEAD',
            error: function() {
                flag = false;
                return flag;
            },
            success: function() {
                images[i] = '<?php echo $productSlug . "-1-"; ?>';
                images[i] += x + '.jpg';
                i++;
                x++;
                return images[i];

            }

        });
        alert(flag);
    }

我会说以这种方式扫描文件系统并不是最优雅的方法。您可以触发最终可能返回false的AJAX调用,但在此期间,浏览器可能会继续启动其他调用,因为AJAX是异步的。

服务器端Web服务在这里是理想的,如果这是一个选项。还有File API,这可能是更好的方法,但没有完整的浏览器支持:http://caniuse.com/fileapi

更新

您不需要在成功回调中编写return images[i];,因为您实际上并没有将数组返回到任何内容。鉴于您当前的体系结构,您可能还希望在错误处理程序中开始处理您的图像数组,因为这是没有更多感兴趣的文件的提示,但我再次建议尝试找到另一种方法来执行此操作,如果有的话可能的。

更新#2

尼克是绝对正确的,你应该把它翻到同步,这将消除我之前提到的同步性问题(我怎么会错过那个?!)