iOS: аутентификация с использованием XMLHttpRequest - обработка ответа 401

Я пишу приложение для iOS с использованием PhoneGap (он же Cordova), у меня есть простая html-страница входа в систему, которая регистрирует пользователя с помощью XMLHttpRequest с базовой аутентификацией по SSL. Все работает великолепно, когда вы правильно вводите имя пользователя и пароль. Однако, если вы введете неправильное имя пользователя / пароль, ни один из моих обратных вызовов не будет вызван.

Если вы запускаете тот же код в Chrome, например, с неверным именем пользователя и паролем, chrome ведет себя аналогичным образом, за исключением того, что он вызывает диалоговое окно проверки подлинности. Нажатие кнопки «Отмена» в диалоговом окне Chrome возвращает управление моему JavaScript-коду. К сожалению, на iOS UIWebView даже не открывает диалоговое окно авторизации, оно просто зависает. Мне нужен способ сообщить пользователю, что он ввел неправильное имя пользователя или пароль, чтобы они могли повторить попытку.

Самым близким к ответу, который я смог найти, было этоhttp://www.freelock.com/2008/06/technical-note-http-auth-with-ajax но изменение статуса ответа с сервера не кажется правильным.

Вот как выглядит мой код запроса, но когда отправляется неверное имя пользователя или пароль, он никогда не достигает моего обратного вызова onload (на самом деле обратный вызов onreadystatechange вызывается только один раз, и это для readyState 1, то есть OPEN).

var req = new XMLHttpRequest();
req.onload = function(ev) {
    if (req.status == 401) {
        alert("Invalid Username/Password");
        document.getElementById('password').focus();
    } else if (req.status == 200) {
        window.location.href = some_secure_site;
    } else {
        // edit //
        alert("Some other status");
    }
}
req.onerror = function (ev) { alert('Error'); };
req.ontimeout = function(ev) { alert('Timeout'); };
req.open('GET', uri, true, userValue, passValue);
req.withCredentials = true;
req.send();

Ответы на вопрос(5)

Ваш ответ на вопрос