Загрузка файла jquery не работает с 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 жалуется, что success а также error функция не найдена.

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

Это сообщение об ошибке. Спасибо за помощь.

1 ответ

Решение

jQuerys success а также error изначально были частью $.ajax, как в

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

Но, как $.ajax стартер, возвращающий Deferreds, изменился на done а также fail

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

Это вызвало некоторую путаницу, поэтому идентичные методы называются success а также error был добавлен, так что можно было сделать

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

Решение удалить success а также error был сделан в выпуске jQuery 3.x

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

Вы можете просто поменяться done а также fail в качестве прямой замены в вашем коде для success а также error в качестве плагина Fileupload используется скрытый $ jauery $.ajax.
Отложенные jQuery теперь совместимы с Promise A+, так что можно использовать then а также catch также

Другие вопросы по тегам