我正在经历一个令人讨厌的问题。在这里:
我的脚本上传文件并使用JSON编码对象作出响应,该对象包含需要其他信息的文件ID号。
现在,问题。我想显示一个对话框(表单)并等待用户填写它,通过AJAX将其发送回服务器,然后对第二个ID号重复相同的过程,依此类推。
我尝试使用$ .each执行此操作,但未成功。我读取$ .each可以通过在回调函数中返回false来终止,但是我没有找到任何提及如何等待事件的事件(让我们说我的表单中的提交按钮被点击)然后继续循环。
美好的一天
coll_id = 0; // collection pointer
collection = [
{
id : 4,
fileName : 'somefile.mp3'
},
{
id : 6,
fileName : 'anotherFile.mp3'
}
];
function openDialog(){
$('#browser-add-files-id3').bind('dialogclose', function(){
if(coll_id >= collection.length-1){
try{
closeDialog(collection[coll_id].id);
}
catch(err){
}
coll_id++;
}
else {
closeDialog(collection[coll_id].id);
coll_id++;
openDialog();
}
});
$('#id3-file').text(collection[coll_id].fileName);
$('#browser-add-files-id3').dialog('open');
}
function closeDialog(mid){
// $.post to /url/param/mid
// cleanup the input fileds in dialog
}
答案 0 :(得分:0)
您不能将异步行为与同步的.each()混合使用。你可以做的是用.each()遍历所有项目,并检查你是否找到了一个尚未处理的项目。如果是这样,则将其标记为已处理,触发异步请求,然后返回false以停止每个()。
在异步成功回调中,您只需再次触发.each()循环,它将跳过所有已处理的项目,如果找到一个尚未处理的项目,请将其标记为此并启动异步请求等
为了将项目标记为已处理,我建议使用jQuery的数据函数使用$(item).data('processed', true)
或类似内容。