要上传多个文件,我使用JavaScript循环遍历文件。 要上传我正在使用jQuery表单插件http://archive.plugins.jquery.com/project/form
的文件现在,当循环运行时,它会立即运行到循环结束,并一次性上传所有文件。
有没有办法让循环在每次上传时保持不变?
这是使用循环的示例(实际代码非常大)
for(i=0;i<=num;i++)
{
if(go1){
<?php //if 1 upload only, hide add and upload button ?>
$('#ad,#ok').hide();
var z=i;
$('#up'+i).ajaxSubmit({
dataType:"json",
beforeSubmit:function(before){
$('#loadingsignup').show;
$("#resultsignup").empty().hide();
},
success:function(retour){
res=retour;
if(num<1){ <?php // only one upload, redirect if uploaded correct, reintroduce upload button if error ?>
if(res.ok=="ok"){
window.location.replace('<?php echo $config['baseurl']; ?>/player/'+res.aid);
}else{
$('#rs'+z).append('<div class="pasgood">'+res.err+'</div>').show();
$('#ad,#ok').show();
}
}
}
});
}
}
我真的需要循环来逐个浏览上传。
答案 0 :(得分:2)
不,循环是同步的,而上传是异步的。如果您希望上传一个接一个地发生,您将需要从第一个成功回调中触发第二个等。
function upload(i, suc, err) {
if (i > num)
return suc();
$('#up'+i).ajaxSubmit({
dataType:"json",
beforeSubmit:function(before){
$('#loadingsignup').show();
$("#resultsignup").empty().hide();
},
success:function(res){
if(res.ok=="ok"){
$('#ad,#ok').show();
upload(i+1, suc, err); // next one
} else {
$('#rs'+i).append('<div class="pasgood">'+res.err+'</div>').show();
err(res.err); // or continue with the rest?
}
},
error: err
});
}
upload(0, function allDone(){
window.location.replace('<?php echo $config['baseurl']; ?>/player/');
}, function somethingWrong(){ … });
答案 1 :(得分:-1)
使用async: false
作为$.ajax()
参数。这将避免一次发送文件,$.ajax
将等待请求的执行完成,循环将继续到下一个项目。
DOCS: 默认情况下,所有请求都是异步发送的(默认设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred);您必须使用完整/成功/错误回调。
但无论如何你需要同步执行。