2013-03-12 53 views
4

因此,我在MVC 4應用程序中使用FineUploader 3.3,這是一個非常酷的插件,非常值得名義成本。感謝您構建這個,非常有用。現在,我只需要讓它正常工作。FineUploader OnComplete方法未觸發。新手,需要一些手柄

我很新的MVC和絕對新的傳回JSON,所以我需要一些幫助得到這個工作。以下是我正在使用的內容,全部在doc.ready中。

var manualuploader = $('#files-upload').fineUploader({ 
request: 
{ 
    endpoint: '@Url.Action("UploadFile", "Survey")', 
    customHeaders: { Accept: 'application/json' }, 
    params: { 
     //variables are populated outside of this code snippet 
     surveyInstanceId: (function() { return instance; }), 
     surveyItemResultId: (function() { return surveyItemResultId; }), 
     itemId: (function() { return itemId; }), 
     imageLoopCounter: (function() { return counter++; }) 
    }, 
    validation: { 
     allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp'] 
    }, 
    multiple: true, 
    text: { 
     uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files' 
    },        
    callbacks: { 
     onComplete: function(id, fileName, responseJSON) { 
      alert("Success: " + responseJSON.success); 
      if (responseJSON.success) { 
       $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">'); 
       } 
      } 
    } 
} 

編輯:使用Internet Explorer 9我一直,然後切換到Chrome瀏覽器,Firefox和我可以上傳就好了。 IE9需要什麼?無論瀏覽器如何,驗證都不起作用。

端點火災,文件/參數被填充,所以這一切都很好!驗證不會阻止用戶選擇此列表以外的任何內容,但我可以暫時處理此問題。我可以成功保存並執行我的上傳所需的操作,減去啓動OnComplete。實際上,在IE中,我得到了我目前所擁有的「打開/保存」對話框。

問題:onComplete(id,filename,responseJSON)中的函數參數是通過返回還是出路填充的?我只是對此感到困惑。我的JSON是否必須包含這些參數,並填充?

我不這樣做(填充這些參數),並在C#我的輸出方法返回JsonResult這樣看,剛剛回國的「成功」(如果適用):

return Json(new { success = true }); 

我是否需要添加更多?這條線是在保存發生之後,我想要做的就是告訴用戶一切都很好。我的Json中的'success'屬性是否與responseJSON.success匹配?

我錯過了什麼,或者錯了?我相信這也會幫助其他人,所以我希望你會花時間和協助。我很感激!謝謝。

回答

10

解決你的問題的項目:

  1. 關於「選擇文件」對話框內的限制,你還必須設置acceptFiles驗證選項。有關更多詳細信息,請參見validation option section in the readme
  2. 您的validation選項屬性在錯誤的地方。它不應該在request屬性/選項下。您的text,multiplecallbacks選項/屬性也是如此。另外,你沒有正確設置jQuery插件的回調。
  3. IE中的打開/保存對話框是由您的服務器未返回帶有正確「Content-Type」標頭的響應引起的。您的迴應的內容類型應該是「文本/純文本」。有關更多詳細信息,請參閱server-side readme
  4. 在處理響應客戶端時,您的服務器返回的任何響應將由Fine Uploader使用JSON.parse進行解析。在服務器響應中調用JSON.parse的結果將作爲responseJSON參數傳遞給onComplete回調處理程序。如果您想要將特定信息從服務器傳遞到您的客戶端代碼(例如您可能想要顯示客戶端的一些文本,上傳文件的新名稱等),則可以通過向您的應用程序添加適當的屬性服務器響應。這些數據將在您的onComplete處理程序中提供給您。如果您對此沒有任何需求,則可以簡單地返回您當前返回的「成功」響應。我鏈接到的服務器端自述文件提供了有關所有這些信息的更多信息。

爲了澄清我在#2說,你的代碼應該是這樣的:

$('#files-upload').fineUploader({ 
    request: { 
     endpoint: '@Url.Action("UploadFile", "Survey")', 
     customHeaders: { Accept: 'application/json' }, 
     params: { 
      //variables are populated outside of this code snippet 
      surveyInstanceId: (function() { return instance; }), 
      surveyItemResultId: (function() { return surveyItemResultId; }), 
      itemId: (function() { return itemId; }), 
      imageLoopCounter: (function() { return counter++; }) 
     } 
    }, 
    validation: { 
     allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp'] 
    }, 
    text: { 
     uploadButton: '<i class="icon-plus icon-white"></i>Drop or Select Files' 
    } 
}) 
    .on('complete', function(event, id, fileName, responseJSON) { 
     alert("Success: " + responseJSON.success); 
     if (responseJSON.success) { 
      $('#files-upload').append('<img src="img/success.jpg" alt="' + fileName + '">'); 
     } 
    });        
+0

真棒!我得到它的工作,非常感謝。我不得不說,我對什麼元素(和其他部分......)感到困惑。你的服務和速度幫助你是驚人的。再次感謝。 – RichieMN 2013-03-12 19:17:06