jQuery Ajax Неожиданный токен <ошибка на 404 вместо обычной ajax функция обработчика ошибок - PullRequest
1 голос
/ 06 апреля 2020

При использовании функции jQuery Ajax при указании обработчиков ошибок и успешных действий можно ожидать, что назначенная функция обработчика ошибок обнаружит недопустимые файлы и ошибки 404, но по какой-то причине мой код этого не делает.

Код:

// using jQuery 3.4.1
// this code has been taken from a larger function, but the issue can be replicated by pasting
// the following code into the JS Console.

var scriptPath = 'http://mywebserver.localhost/application/invalid.js';

jQuery.ajax( {
    async: false,
    type: 'GET',
    url: scriptPath,
    crossOrigin: false,
    data: null,
    global: false,
    cache: true,
    success: function() {
        debugger;
        // do some stuff
        onResult();
    },
    error: function( jqXHR, textStatus, errorThrown ) {
        debugger;
        Lib.showNetworkErrorAlert( jqXHR, textStatus, errorThrown );
    },
    dataType: 'script'
} );

Это приводит к:

Uncaught Error From: ~ unknown ~

Ошибка: Uncaught SyntaxError: Неожиданный токен '< 'in: http://mywebserver.localhost/ ........ строка: 1

Просто чтобы прояснить, я уже рассмотрел вопросы SO, но те Я обнаружил тенденцию сосредоточиться на причине ошибки. Я знаю, что является ошибкой «Неожиданный токен

Я пытаюсь выяснить и понять, почему эта ошибка появляется вместо указанного обычного обработчика ошибок. По крайней мере, я бы подумал, что установка dataType в скрипт заставит его немного лучше понять, эй, это файл ошибок HTML 404, а не скрипт.

Любая помощь и понимание очень приветствуется.

Обновление: Вот вкладка Сеть от Dev Tools, показывающая, что она возвращает 404.

Dev Tools Network Tab

1 Ответ

1 голос
/ 08 апреля 2020

Оказывается, это на самом деле ошибка в jQuery - вместо того, чтобы я использовал ее неправильно - о чем сообщили в 2018 , но исправление было только предназначено для включения в jQuery 4.0.0 .

Однако это может занять некоторое время, поэтому я снова сообщил об ошибке для включения в более актуальные версии, и администраторы с тех пор обсудили это и решили включить его в качестве исправить в 3.5.0.

Объяснение ошибки

Обычно использование атрибута dataType:script сообщает jQuery 'Ajax function "Я предоставляю скрипт, пожалуйста, выполните JavaScript после загрузки. "

Проблема заключалась в том, что независимо от кода состояния ответа файл (или что-то еще было возвращено) будет оцениваться как JavaScript (даже если не JavaScript) что, конечно, приведет к ошибкам, если ошибка 404 возвращает страницу 404 Ошибка HTML.

Решение этой проблемы можно увидеть на Github (просто я не объясняю это неправильно здесь), но в простых сроках это должно больше не выполняет сценарии для неудачных ответов HTTP.

...