2017-08-18 85 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