使用Cordova jquery ajax调用未经授权就获得401,最高可达Phonegap 1.4,运行良好

使用Cordova jquery ajax调用未经授权就获得401,最高可达Phonegap 1.4,运行良好,jquery,cordova,basic-authentication,Jquery,Cordova,Basic Authentication,我已经将我的项目升级到Phonegap 1.4到Cordova 1.8.1。当我在Phonegap 1.4中传递无效的用户名/密码时,对webservice的Ajax调用在401 Unauthorized下运行良好 升级后,它不工作,我没有得到任何响应,web服务留在那里 如果将代码更改为Phonegap 1.4,它将开始工作 请帮帮我,我也有同样的问题。如果您传递了错误的凭据并使用 $.ajax({ ... timeout: 5000, // Some timeout valu

我已经将我的项目升级到Phonegap 1.4到Cordova 1.8.1。当我在Phonegap 1.4中传递无效的用户名/密码时,对webservice的Ajax调用在401 Unauthorized下运行良好

升级后,它不工作,我没有得到任何响应,web服务留在那里

如果将代码更改为Phonegap 1.4,它将开始工作


请帮帮我,我也有同样的问题。如果您传递了错误的凭据并使用

$.ajax({
    ...
    timeout: 5000, // Some timeout value that makes sense
    ...
});
然后用
{“readyState”:0,“status”:0,“statusText”:“timeout”}
调用错误回调。在这种情况下,您必须猜测真正的错误是HTTP 401

或者,您可以使用

$.ajax({
    ...
    async: false, // :-(
    ...
});

您的错误回调将返回类似于
{“readyState”:4,“responseText”:“…”,“status”:401,“statusText”:“Unauthorized”}
的内容。

我在过去几个月里一直遇到这个问题,最后终于解决了

首先,我们使用的临时解决方法是对请求实现超时。这是可行的,但反应总是404。我们不知道它是否真的没有通过身份验证,或者我们的服务是否停止了。对于我们的系统来说,这不是一个可接受的解决方案

最后,通过谷歌搜索,我发现了真正的问题

当401被返回时(这是一个基本的身份验证,身份验证失败),它会向响应添加一个标题,称为“WWW Authenticate”。这会告诉浏览器提示用户尝试登录。iOS webview不知道该怎么办,因此应用程序会挂起


从您的服务中,您只需删除WWW Authenticate标头,就可以开始在错误函数中看到401。

同时使用cordova 1.8.1。当我使用HTTP身份验证(Basic)时,我不会得到任何错误回调。IOS和Android都只是在超时错误的情况下完成了应用程序。看起来这仍然是Cordova 3.1.0中的一个bug(公平地说,它是IOS“吞咽”响应的结果):谢谢你,因为我花了几个小时试图找出错误。在最新版本的Cordova for iOS中,这仍然是一个bug/问题。在iOS上使用async选项可以修复此问题,并允许从服务器捕获401条件。好的,还有另一个问题:如果Ajax请求以async=false终止,状态代码为401,则服务器会同时收到两个请求。这是戏剧性的,因为同时注册了两次登录尝试,因此用户被阻止了。