Я пытаюсь создать расширение Google Chrome, которое делает запрос ajax. Что-то похожее на расширение GMail Checker. Проблема в том, что когда я выполняю запрос с использованием jquery, и я ввел неправильное имя пользователя/пароль, он терпит неудачу, при этом функция обратного вызова ошибки игнорируется.
Если я переведу вызов ajax из background.html script (где я не вижу запросы в окне разработчика), в options.html script, я получаю диалоговое окно, аутентификации. Если я нажму на отмену, ТОГДА срабатывает обратный вызов ошибки jQuery.
Но в исходном расширении модели (опять же, Gmail checker) они используют простые (не jquery) ajax-вызовы с try/catch, и если я ввел неправильные учетные данные, я получаю предупреждение, говорящее так же.
Я попробовал обернуть весь вызов 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?
Update
Вот очень тонкая версия того, как код модели выполняет запрос:
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.');
}