Я просто замечаю странное поведение при динамической загрузке скриптов с помощью AJAX. У меня умышленно есть код с ошибкой, который выдает ошибку при анализе. Хотя консоль Chrome действительно показывает ошибку, обработчик ошибок AJAX никогда не вызывается.AJAX без проблем при загрузке скрипта
Это функция, которую я использую для загрузки файлов:
var load_source = function (path) {
/* Variable used to determine whether the request was successful */
var success = false,
failed;
$.ajax(
{
url: path,
async: false,
dataType: 'script',
method: 'GET'
}
).
done(function() {
success = true;
}).
fail(function (xhr, status, error) {
failed = error.stack ? error.stack : error;
});
if (failed)
{
throw new Error('Unable to load JS file {0}: {1}'.format(path, failed));
}
}
Единственная переменная при условии, функции load_source является «путь», значение которого является строка с адресом и именем такой файл: "js/myFile.js".
Неправильно написанная часть (часть с опечаткой) сценария для загрузки заключается в следующей:
var f = function (arg) {
var param1 = 3,
param2, /* NOTICE the typo: there is a comma instead of a semicolon */
if (param1 > arg)
{
return true;
}
// And more code is coming next...
Если я смотрю на консоли Chrome, он показывает ошибку:
неперехваченного SyntaxError: Неожиданный токен, если
Пока единственный способ поймать ошибку - это событие onerror окна.
Так что, если это единственный способ поймать ошибку, не могли бы вы сказать мне, как остановить «кодирование» поток, я имею в виду, когда я называю load_source что выдает ошибку (которая обрабатывается функция окна OnError функция) Я хочу, чтобы сценарий не делать ничего другого:
load_source('js/myFile.js'); // This script will throw the "Uncaught SyntaxError: Unexpected token if" error.
// So I don't want the following code to be executed.
sum(4, 3);
mul(5, 5);
// ...
Может вы, ребята, скажите мне, как сделать неудачу событие быть вызвано?
Я также пробовал с «$ (document) .ajaxError», но с теми же результатами.
Возможный дубликат [Могу ли я бросить исключение в Javascript, который останавливает выполнение Javascript?] (Http://stackoverflow.com/questions/9431434/can-i-throw-an-exception-in-javascript-that-stops-javascript-execution) – imtheman
'async: false' и 'dataType: 'script'' не смешиваются. Поскольку этот запрос выполняется с использованием тега
Событие сбоя запускается, это просто не останавливает работу остальных JS.Вы бы лучше делать некоторые вещи, как это:
Затем снимаете
throw
в вашейload_source()
функции и используяreturn success;
, например, так:источник
2016-07-08 21:26:12 imtheman
Привет @imtheman, я редактировал код для этого: если (не удалось) { певд Error ('Невозможно загрузить файл JS {0}: {1}' формат (путь, не удалось).); ) и даже если консоль показывает ошибку, обработчик «fail» никогда не запускается (переменной «fail» присваивается значение в обработчике «fail»). Кроме того, не получите то, что вы имеете в виду * Затем удалите свой 'throw' в своей функции' load_source() 'и используйте 11return submit;' * – DanielYoshua
Я также изменяю fail ($ .Deferred) для «ошибки» AJAX объект, но ошибка никогда не попадает. – DanielYoshua
Взгляните на изменения, которые я сделал. – imtheman