我在表单中使用了Plupload file uploader。我想定制它,以便当表单被提交时,即点击“提交”按钮时,发生的第一件事是文件上传,然后提交表单。如何使用jQuery.Deferred对象来等待异步函数调用完成?
从我所知道的情况来看,我可能对此有错,但看起来uploader.start()
是一个异步函数调用。所以目前,上传将开始,表单将在文件上传之前提交。问题是我无法控制这个函数调用。
我最近阅读了关于new release of 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的方式来做到这一点?
谢谢。
@Raynos ...谢谢你的回复。这一切看起来不错,我甚至没有想过改变源代码,但这是一个好主意!当我回到办公室时,我会试试这个,让你知道会发生什么。 – Hristo 2011-02-09 23:53:21