gui*_*meb 1 jquery android xmlhttprequest basic-authentication cordova
在我使用phonegap制作的Android应用程序中,用户可以登录.当他们这样做时,JQuery获取他们的登录名和密码,并根据HTTP Basic Auth规范使用他们的凭据进行ajax调用.一切正常.
但是,当用户设置错误的凭据时,我遇到了处理这种情况的问题.在.error()回调中,我想显示状态401的特定消息(如"身份验证失败")和其他状态的消息("技术问题").我的代码:
$.ajax({
url: "http://exemple.com",
type: "GET",
dataType: "text",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
beforeSend: function (xhr)
{
xhr.setRequestHeader("Authorization", "Basic "+$.base64.encode(email+":"+password));
},
success: function() {
//my success callback
},
error: function(xhr) {
if(xhr.status===401) {
//"authentication failed"
}
else {
//"technical problem"
}
}
});
Run Code Online (Sandbox Code Playgroud)
此代码在浏览器中正常工作.状态401被发送.但是,当我在我的phonegap android应用程序中测试时,状态发送为0.当我的凭据良好时,状态发送为200,而我的应用程序的其他请求运行良好,所以我不认为这是一个cors问题.
任何的想法 ?谢谢你的帮助
随着更多的研究,我明白问题来自于手机差距.服务器以状态401和WWW-Authenticate : Basic realm="Secured Area"标头响应ajax请求.WebView拦截响应,并且由于标头,等待凭据.但是这种行为在手机上是不可见的,因此请求到达超时并触发0状态代码.
一个好的解决方案是将服务器的响应更改为不包括WWW-Authenticate标头.我的解决方案可能很糟糕但很快,就是将0状态视为401状态.
error: function(xhr) {
if(xhr.status===401 || xhr.status===0) {
//'authentication failed'
}
else {
//'technical error'
}
},
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助某人.
| 归档时间: |
|
| 查看次数: |
2726 次 |
| 最近记录: |