2017-08-18 129 views
1

我的腳本工作正常使用jQuery 1.x和2.x,但它不使用jQuery 3.XjQuery的文件上傳不使用jQuery 3.x的工作

imageInput.fileupload(); 
var jqXHR = imageInput.fileupload('send', { 
    files: files, 
    formData: $.extend({csrfmiddlewaretoken: csrftoken}, attachmentData), 
    url: {{ id }}_settings.url.upload_attachment, 
}) 
.success(function (result, textStatus, jqXHR) { 
    $.each(result.files, function (index, file) { 
     console.log('success'); 
    }); 
}) 
.error(function (jqXHR, textStatus, errorThrown) { 
    console.log('error occurred.'); 
}); 

的FF瀏覽器抱怨工作successerror功能是找不到的。

jQuery.Deferred exception: imageInput.fileupload(...).success is not a function 
.... 
undefined 

這是錯誤消息。感謝您的幫助。

+0

確保您沒有使用jQuery的超薄 – Phil

+0

@Phil謝謝你的提示答案。我不確定這個版本是否是jQuery-slim。 https://code.jquery.com/jquery-3.2.1.min.js – nasiajai

+0

這一個看起來不錯 – Phil

回答

2

jQuerys successerror最初的$.ajax一部分,如

$.ajax({ 
    success : function() {}, 
    error : function() {} 
}) 

但作爲$.ajax起動機返回Deferreds,它改變爲donefail

$.ajax({}).done().fail() 

這造成了一些混亂,所以相同方法稱爲success,並加入error爲好,這樣一個可以做

$.ajax({}).success().error() 

刪除successerror的決定是在jQuery的3.X的新聞稿

https://jquery.com/upgrade-guide/3.0/#breaking-change-special-case-deferred-methods-removed-from-jquery-ajax

可以在donefail只是交換在你的代碼直接替代successerror因爲Fileupload插件使用jQuery的$ .ajax。
jQuery的Deferreds現在無極A +標準,所以人們可以使用thencatch以及

+0

我剛剛更換函數的名稱,並能正常工作。但是,我必須使代碼具有可移植性。謝謝。 – nasiajai