Я пытаюсь создать расширение Google Chrome, которое отправляет запрос ajax. Нечто похожее на расширение GMail Checker. Проблема заключается в том, что когда я делаю запрос с использованием jquery и вводю неверное имя пользователя / пароль, он молча завершается с ошибкой функции обратного вызова.
Если я перемещаю вызов ajax из сценария background.html (где я не вижу запросы в окне разработчика), в сценарий options.html, я получаю диалоговое окно для повторной проверки подлинности. Если я нажму «Отмена», то сработает обратный вызов jquery error.
Но в исходном расширении модели (опять же, в проверке Gmail) они используют простые (не jquery) ajax-вызовы с попыткой / уловкой, и если я ввожу неправильные учетные данные, я получаю предупреждение с таким же количеством слов.
Я попытался обернуть весь вызов jquery в try / catch, вот так:
try {
$.ajax({
type: "POST",
url: someurl,
contentType : "text/xml",
data: somedata,
username: user,
password: pass,
success: function(data,status,xhr){
alert("Hurrah!");
},
error: function(xhr, status, error){
alert("Error!" + xhr.status);
},
dataType: "xml"
});
} catch(e) {
alert("You messed something up!");
}
Но все равно ничего.
Ошибка из-за того, что она асинхронная, или Chrome не возвращает запрос как ошибку, так как он хочет повторно запросить учетные данные? Или я просто не знаю, как использовать try / catch?
Обновление
Вот очень упрощенная версия того, как код модели выполняет запрос:
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
try {
if ( req.readyState == 4 ) {
//Do some stuff with results
}
}
catch (ex) {
alert('Error parsing response.');
}
}
try {
req.send (data);
}
catch (ex) {
alert ('Something went wrong with the request.');
}