Phonegap iOS ajax请求永远不会完成

时间:2015-02-09 07:05:49

标签: ios ajax cordova basic-authentication phonegap-build

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

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

这在台式机上的ripple仿真器中成功完成,当部署到Android设备上时也是如此。

但是,当应用程序部署到iOS设备(ipod touch)时,身份验证请求根本无法完成。使用phonegap远程调试器我可以看到ajax请求启动但从未完成。它始终处于待定状态。我使用jquery ajax成功,错误和完整的处理程序请求,但没有一个被击中所以我没有机会看到从服务器返回任何错误消息。请求似乎永远不会完成。

我尝试向其他远程网站发出ajax请求,以测试我的应用可以通信并且成功,所以看起来好像我没有白名单问题。

关于问题的任何想法?

1 个答案:

答案 0 :(得分: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


<强>更新

我最终发现在iOS的Web视图中没有可靠的使用基本身份验证的方法。即如果输入了正确的凭据,但是当它们不存在且401挑战响应出现时,一切都很好,iOS网页视图似乎无法处理它。

最后,通过简单地传递用户名&#39;来实现Web服务身份验证。和密码&#39;参数作为网址的一部分:

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

这是我发现在Web视图中通过iOS和Android进行身份验证的唯一一致方式(通过完全取消基本身份验证)。这当然意味着更新Web服务本身以这种方式接受身份验证。