jquery 文件上传不适用于 jquery 3.x

jquery file upload not working with jquery 3.x

我的脚本适用于 jQuery 1.x 和 2.x,但不适用于 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

这是错误信息。感谢您的帮助。

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

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

但随着 $.ajax 启动器返回 Deferreds,它变为 donefail

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

这引起了一些混乱,因此也添加了名为 successerror 的相同方法,因此可以做到

$.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 现在符合 Promise A+ 标准,因此也可以使用 thencatch