当我设置错误的凭据时,为什么我的http basic auth请求获得状态0? Phonegap Android

在我使用phonegap制作的Android应用程序中,用户可以登录。当他们这样做时,JQuery获取他们的登录名和密码,并根据HTTP Basic Auth规范使用他们的凭据进行ajax调用。 一切正常。
但是,当用户设置错误的凭据时,我遇到了处理这种情况的问题。 在.error()回调中,我想显示状态401的特定消息(如“身份validation失败”)和其他状态的消息(“技术问题”)。 我的代码:

$.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" } } }); 

此代码在浏览器中正常工作。 状态401被发送。 但是,当我在我的phonegap android应用程序中测试时,状态发送为0.当我的凭据良好时,状态发送为200,而我的应用程序的其他请求运行良好,所以我不认为这是一个cors问题。

任何的想法 ? 谢谢你的帮助

随着更多的研究,我明白问题来自于手机差距。 服务器响应ajax请求,状态为401, WWW-Authenticate : Basic realm="Secured Area"标题中的WWW-Authenticate : Basic realm="Secured Area" 。 WebView拦截响应,并且由于标头,等待凭据。 但是这种行为在手机上是不可见的,因此请求到达超时并触发0状态代码。
一个好的解决方案是将服务器的响应更改为不包括WWW-Authenticate标头。 我的解决方案可能很糟糕但很快,就是将0状态视为401状态。

 error: function(xhr) { if(xhr.status===401 || xhr.status===0) { //'authentication failed' } else { //'technical error' } }, 

希望它可以帮助某人。

滑稽。 我刚刚遇到同样的问题,只是我将用户名和密码属性传递给.ajax而不是使用beforeSend。

尝试将“$ .base64.encode”更改为“btoa” https://developer.mozilla.org/en-US/docs/DOM/window.btoa