我尝试使用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代码中,但我没有多少经验。
答案 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
尼克是绝对正确的,你应该把它翻到同步,这将消除我之前提到的同步性问题(我怎么会错过那个?!)