Phonegap的iOS AJAX请求永远不会完成

我有一个phonegap应用程序,它连接到一个Web服务,并使用http基本authentication进行身份validation。 它使用phonegap构build,并针对Android和iOS。

在login视图中,ajax请求触发远程服务器检查凭据是否正确,如果是,则将用户login到主应用程序。

这在台式电脑上的涟漪仿真器上以及在部署到Android设备上时都可以成功完成。

但是,当应用程序部署到iOS设备(iPod touch)时,authentication请求根本不会完成。 使用phonegap远程debugging器,我可以看到ajax请求开始,但从来没有完成。 它总是处于未决状态。 我使用jQuery的Ajax成功,错误和完整的处理程序的请求,但他们都没有命中,所以我没有机会看到从服务器返回的任何错误消息。 请求似乎从来没有完成。

我已经尝试向其他远程网站发出ajax请求,以testing我的应用程序可以通信,他们成功,所以它似乎没有白名单问题。

任何想法可能是什么问题?

请在底部阅读此答案的更新。


原始答案

我发现问题是什么,并设法获得基本authentication工作。

问题是Web服务器期待基本authentication细节被预先发送请求。

为此,请使用jquery ajax的“ headers ”属性,如下所示:

$.ajax ({ type: "GET", url: "https://webserver/authenticate", headers: { "Authorization": "Basic " + btoa(USERNAME + ":" + PASSWORD) } }) .done(function(){ alert('Authenticated!') }) .fail(function(){ alert('Error!') }); 

请参阅相关的答案: https : //stackoverflow.com/a/11960692/1463497


更新

最后我发现,在iOS的Web视图中没有可靠的方式来使用基本authentication。 即一切都很好,如果input正确的凭据,但是当他们没有和401挑战响应出现时,iOSnetworking视图似乎无法处理它。

最终,Web服务authentication是通过简单地将“用户名”和“密码”参数作为URL的一部分来实现的:

 url: "https://webserver/authenticate?username=abc&password=123" 

这是我唯一一致的方式,我发现通过iOS和Android的Web视图(通过完全摆脱基本身份validation)获得身份validation工作。 这当然意味着更新Web服务本身以这种方式接受authentication。