2015-02-09 63 views
1

我有一个phonegap应用程序,它连接到Web服务并使用http基本身份验证进行身份验证。它是使用phonegap构建的,针对Android和iOS。Phonegap iOS AJAX请求永远不会完成

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

这在桌面PC上的涟漪模拟器中以及在部署到Android设备上时也成功完成。

但是,当应用程序部署到iOS设备(ipod touch)时,认证请求根本不会完成。使用phonegap远程调试器,我可以看到ajax请求开始但从未完成。它总是处于未决状态。我使用jquery ajax成功,错误和完整的处理程序来处理请求,但没有一个被打到,所以我没有机会看到从服务器返回的任何错误消息。该请求从未似乎完成。

我已经尝试向其他远程网站发送ajax请求来测试我的应用程序可以进行通信并且它们成功,所以它似乎并不像我有白名单问题。

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

+0

This [link](http:// stackoverflow。com/questions/28305642/request-changed-from-post-to-options-hangs)可能会有所帮助。 – frank 2015-02-09 08:31:59

+0

谢谢@frank但与我的问题无关。我找到了我的问题的答案,并在下面发布。谢谢。 – 2015-02-10 01:30:40

回答

4

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


原来的答复

我已经找到了问题所在,并设法得到基本的认证工作。

问题是,网络服务器期待基本身份验证详细信息被预先发送与请求。

要做到这一点使用jQuery的AJAX的 '' 属性如下图所示:

$.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


更新

我最终发现没有reli在iOS的Web视图中使用基本身份验证的有效方法。 I.e如果输入了正确的凭证,但一旦没有并且401挑战响应出现,一切都很好,iOS Web视图似乎无法处理它。

最后,Web服务认证是通过传递“用户名”和“密码”参数作为URL的一部分来实现:

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

这是我发现越来越身份验证的唯一一致的方式在网络视图中跨iOS和Android工作(通过完全摆脱基本身份验证)。这当然意味着更新Web服务本身以接受这种认证。

+0

它不适合我。 – 2015-09-03 15:11:35

+0

仅仅在iOS中,基本身份验证不起作用?我还发现,如果输入不正确的凭证作为基本认证头文件,那么这是触发永不结束响应的位,因为浏览器然后试图挑战您输入正确的凭证,但是您不能,因为流行从未出现。在我上面的答案中看到我的编辑。 – 2015-09-03 22:49:25

+0

这让我疯狂!我的应用程序会间歇性地从不完成请求,我无法弄清楚 - 并且干净的擦拭和重新安装会修复它 - 这就是为什么。现在要弄清楚该怎么做,而不是... – BIU 2015-10-21 13:39:07