[AJAX / JQUERY] Uncaught TypeError: Illegal invocation?

function ajax ($data){
let setup = {};
        // $data является либо new FormData(), либо объектом
        if ($data instanceof FormData) {
            setup = {
                processData: false,
                contentType: false
            };
        }

$.ajaxSetup({
            url: "/dummy_url",
            type: "POST",
            data: $data,
            dataType: "JSON",
            cache: false
});

return $.ajax(setup);
}

От сервера в переменную $response возвращается массив с ссылками на скрипты, которые необходимо загрузить в зависимости от параметров формы:
$.each($response, function (k, v) {
       $.getScript(v);
});

Если изначально отправлялась формдата, получаю ошибку:
Uncaught TypeError: Illegal invocation
    at i (jquery-3.3.1.min.js:2)
    at jt (jquery-3.3.1.min.js:2)
    at Function.w.param (jquery-3.3.1.min.js:2)
    at Function.ajax (jquery-3.3.1.min.js:2)
    at Ajax.self.request (app.ajax.js:40)
    at HTMLFormElement.<anonymous> (account.function.js?0.1:55)
    at HTMLDocument.dispatch (jquery-3.3.1.min.js:2)
    at HTMLDocument.y.handle (jquery-3.3.1.min.js:2)

Если отправлялся объект, то скрипты нормально загружаются в DOM:
let $data = {id: 1, value: "dummy_value"}

В чем собственно прЕкол? Очевидно, что проблема в формдате, но в чем именно не понимаю.
  • Вопрос задан
  • 16359 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Insayt
Укажите дополнительные параметры в $.ajaxSetup

var $data = new FormData();
$.ajaxSetup({
            url: "/dummy_url",
            type: "POST",
            data: $data,
            processData: false,
            contentType: false,
            dataType: "json",
});
$.getScript('/url');


processData - отвечает за то, что бы jQuery не пытался превратить объект который вы кидаете внутрь запроса в соответствии с Content-type: 'application/x-www-form-urlencoded'.

contentType - это будет ли устанавливать jQuery заголовок Content-type. (мб вам и не понадобится)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы