没有获得401未经授权的Cordova jquery ajax电话,Upto Phonegap 1.4它工作正常

我已将我的项目升级到Phonegap 1.4到Cordova 1.8.1。 当我在Phonegap 1.4中传递无效的用户名/密码时,Ajax对webservice的调用与401 Unauthorized一起工作正常。

升级后,它不起作用,我没有得到任何响应和Web服务留在那里。

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

请帮忙

我在过去的几个月里遇到过这个问题并最终弄明白了。

首先,我们使用的临时解决方法是在请求上实现超时期限。 这有效,但响应始终是404.我们不知道它是否真的失败了身份validation,或者我们的服务是否已关闭。 我们的系统不是一个可接受的解决方法。

最后,经过多次谷歌搜索,我发现了实际问题。

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

从您的服务中,您需要做的就是删除WWW-Authenticate标头,您应该开始在错误function中看到401。

我刚遇到同样的问题。 如果您传递错误的凭据并使用

$.ajax({ ... timeout: 5000, // Some timeout value that makes sense ... }); 

然后使用{"readyState":0,"status":0,"statusText":"timeout"}调用错误回调{"readyState":0,"status":0,"statusText":"timeout"} 。 在这种情况下,你必须猜测真正的错误是HTTP 401。

或者你可以使用

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

并且您的错误回调将获得类似{"readyState":4,"responseText":"...","status":401,"statusText":"Unauthorized"}返回。