0

我正在尝试使用 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 循环并将“x”替换为我的图像名称中不存在的数字,并且标志变量始终返回 true。

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

4

2 回答 2

0

你的语法不好。

        i++;
        x++;

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

为确保您尝试执行的操作发生,您必须使代码“阻塞”请求,使其同步。用作ajaxasync:false参数的一部分。

于 2013-08-16T15:20:05.883 回答
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

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

于 2013-08-16T15:21:22.513 回答