我正在使用 PhoneGap(又名 Cordova)编写一个 iOS 应用程序,我有一个简单的 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();