Посмотрев на код, чтобы посмотреть, смогу ли я извлечь его для построения рабочего примера (в ответ на комментарий serg), я не думаю, что то, что я хочу сделать, возможно с jQuery.
В jQuery при сбое вызова ajax вызывается событие ошибки (для того, чтобы оно было перехвачено обработчиком события .ajaxError ()), а затем функция завершается / возвращается.Когда запускается обработчик .ajaxError (), функция не работает.(В этом, я полагаю, и заключается весь смысл асинхронной системы событий в JS).
Теперь я только догадываюсь, но я думаю, что в Chrome канал связи между скриптом контента ифоновый скрипт закрывается при запуске функции слушателя;нельзя отправить ответ из фонового сценария в сценарий содержимого после завершения функции прослушивателя, что я пытался сделать при обработке ошибки ajax в обработчике событий.
Итак, чем я закончилВ результате была реализована функция ajax, которая на самом деле отправляет обратно полный объект: если вызов завершается неудачно, он возвращает тот факт, что произошла ошибка, вместе с кодом ошибки, так что функция вызывающей стороны (фактически, обратный вызов) можетразберитесь с этим и отправьте ответ на скрипт контента.
Это всего несколько строк, и (я думаю) довольно общий, так что вот оно:
function xhr(url, callback) {
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState == 4) {
var resp = {
"url": url,
"status": req.status
};
if (req.status == 200) {
resp.html = req.responseText;
resp.outcome = "ok";
}
else {
resp.outcome = "error";
}
callback(resp);
}
}
req.send(null);
}