我在表单中使用Plupload 文件上传器。我想对其进行自定义,以便在提交表单时,即单击“提交”按钮时,首先发生的是文件上传,然后是提交表单。
据我所知,我可能对此有误,但似乎该调用uploader.start()
是异步函数调用。所以此刻,上传将开始,表单将在文件上传之前提交。问题是我无法控制这个函数调用。
我最近读到了jQuery 1.5 的新版本和新的Deferred Object,似乎这有可能帮助我解决这个问题。有没有办法等待异步函数调用完成它的工作,然后在调用之后继续执行代码。所以我正在寻找类似以下伪代码的东西......
var uploader = $('#plupload_container').pluploadQueue();
$('#submitButton').click(function() {
// if there are files to be uploaded, do it
if (uploader.files.length > 0) {
// make the call and wait for the uploader to finish
uploader.start();
while ( the uploading is not done ) {
wait for the uploader to finish
}
// continue with submission
}
});
有没有办法“等待”uploader.start()
完成,本质上是在单击事件处理程序上暂停,以便可以首先上传所有文件,然后单击事件处理程序的其余部分可以完成执行?我尝试了以下操作,但在文件上传完成之前打印了“完成”...
$.when(uploader.start()).then(function () {
console.log("done")
});
另一个有用的信息...我可以将某些事件绑定到此uploader
对象实例,例如“UploadProgress”或“UploadComplete”。例如,我可以使用延迟对象以某种方式捕获“UploadComplete”事件触发吗?有没有一种 AJAX-y 方式来做到这一点?
谢谢。