Phonegap iOS ajax 请求永远不会完成

Posted

技术标签:

【中文标题】Phonegap iOS ajax 请求永远不会完成【英文标题】:Phonegap iOS ajax request never completes 【发布时间】:2015-02-09 07:05:49 【问题描述】:

我有一个 phonegap 应用程序,它连接到 Web 服务并使用 http 基本身份验证进行身份验证。它是使用 phonegap 构建的,面向 androidios

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

这在台式电脑上的涟漪模拟器中成功完成,并且在部署到 Android 设备上时也是如此。

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

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

你有什么想法吗?

【问题讨论】:

这个link 可能会有所帮助。 感谢@frank,但与我的问题无关。我找到了我的问题的答案,并在下面发布。谢谢。 【参考方案1】:

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


原答案

我找到了问题所在并设法使基本身份验证正常工作。

问题在于网络服务器希望基本身份验证详细信息会与请求一起抢先发送

为此,请使用 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://***.com/a/11960692/1463497


更新

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

最终,通过简单地将“用户名”和“密码”参数作为 url 的一部分传递来实现 Web 服务身份验证:

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

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

【讨论】:

是否只是在 iOS 中,基本身份验证不起作用?我还发现,如果输入了不正确的凭据作为基本身份验证标头,那么这就是触发永无止境响应的位,因为浏览器随后试图挑战您输入正确的凭据,但您不能因为弹出up 永远不会出现。在上面的答案中查看我的编辑。 这快把我逼疯了!!我的应用程序将间歇性地永远不会完成请求,我无法弄清楚 - 干净的擦除并重新安装会修复它 - 这就是原因。现在要弄清楚该怎么做......

以上是关于Phonegap iOS ajax 请求永远不会完成的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap AJAX 请求未定义

服务器数据未通过 AJAX 请求在 PhoneGap 框架上传播

ssl上的phonegap ajax请求错误

来自 jQuery.ajax 请求的 403 Forbidden 响应与 PhoneGap 桌面

Android 设备上的 phonegap 应用程序不发送 AJAX 请求

phonegap pushwoosh 插件 registerDevice 回调函数永远不会在 android 上触发