我在表單中使用了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