2012-11-26 48 views
0

我用jQuery文件上傳插件(https://github.com/blueimp/jQuery-File-Upload)同時上傳多張圖片在rails中。該照片附加到項目模型,並將項目添加到投票中。jQuery fileupload插件成功回撥

使用插件爲:

$(document).ready(function(){ 
    $('#fileupload').fileupload({ 
     url: '/polls', 
     dataType: "json", 
     done: function(e,data){ 
     window.location = "/polls/" + data.result.id; 
     } 
    } 
}); 

據預計呼籲在投票控制器每張照片的文件創建操作和重定向頁面,以顯示創建民意調查中的所有文件被上傳後。但是,例如,選擇6個文件進行上傳時,首先在投票頁面中僅顯示4張照片。刷新頁面後,顯示6張照片。我猜想這個問題是由回調函數造成的。似乎將其重定向到投票頁面,然後上傳所有文件
完成。所有上傳請求都應該成功發送,但這些項目並非全部創建(回形針處理圖像可能需要幾秒鐘)。

對我來說有什麼建議可以解決這個問題?謝謝

編輯:檢查「完成」回調函數實際上是爲每個成功的http請求調用。在所有請求被髮送後它都沒有被調用。併爲每個照片文件調用創建操作。我怎麼能有一個函數,只有在所有的文件上傳後,客戶端或服務器端纔會回調?

回答

1

完成的回調就像由jQuery ajax()發送的成功回調,並不意味着文件上傳已完成。嘗試使用

$('#fileupload').bind('fileuploaddone', function (e, data) {/* ... */}) 

我不確定上述是否能正常工作,但試試看。如果不是這樣,你總是可以在服務器端編寫一個方法來在上傳完成時報告。

+0

試過。這次只有4個文件上傳時選擇了6個。刷新輪詢頁面後,仍然是4.服務器告訴只發送了4個請求。 –

1

您可以嘗試使用add回調計算正在上傳的文件,然後在每個done回調中遞減該數字。那麼你只會做重定向,如果這個數字是0

事情是這樣的:

$(document).ready(function(){ 
    var filesToProcess = 0; 
    $('#fileupload').fileupload({ 
     url: '/polls', 
     dataType: "json", 
     add: function(e, data){ 
     filesToProcess++; 
     }, 
     done: function(e,data){ 
     filesToProcess--; 
     if (filesToProcess === 0){ 
      window.location = "/polls/" + data.result.id; 
     } 
     } 
    } 
}); 
+0

+1,'add:'雖然不起作用,但使用'added:'來代替。 – Burjua

-1

還有另外一個回調"stop"當所有的文件都上傳被解僱。嘗試改爲