PhoneGap Ionic 项目未在 iOS 设备上执行 $http.post

Posted

技术标签:

【中文标题】PhoneGap Ionic 项目未在 iOS 设备上执行 $http.post【英文标题】:PhoneGap Ionic project not performing $http.post on iOS device 【发布时间】:2015-11-03 20:24:50 【问题描述】:

我正在使用 Ionic 框架构建一个 html5 应用程序,然后使用 PhoneGap 将其部署到 ios 设备。一切都很好,然后我们切换了一些用于获取数据的服务器地址,以在地址中包含端口号,并将 HTTP 方法从 GET 切换到 POST。切换后,我们在浏览器中进行了本地测试,它可以毫无问题地提取数据。当我们部署到设备上时,执行请求时我们在日志中什么也看不到,并且从未到达成功或错误处理程序。在下面的代码中,只打印了“HERE1”,一切都停止了。

console.log("HERE1");
$http.post("http://XX.XX.XX.XX:81/api/Authenticate", null , headers: 'Authorization': 'Basic ' + encodedNamePw )
            .success(function (data, status, headers, config) 
                console.log("HERE2");
            )
            .error(function (data) 
                console.log("HERE3");
            );

然后我尝试对同一地址执行 GET 并收到响应,说我显然使用了不正确的方法。然后我尝试在没有端口的情况下对地址进行 POST 并得到响应,这又是一个错误,但至少我得到了响应。所以总结一下它在浏览器中本地工作,它在带有 GET 请求和 PORT 的 iOS 设备上工作,但是当我使用 POST 方法时它不会发出任何请求。我确实试图逃离结肠,但这并没有帮助。我对此感到非常困惑,所以任何想法都会受到赞赏。谢谢!

【问题讨论】:

请注意,我也用 Jquery 尝试过,但遇到了同样的问题 【参考方案1】:

在痛苦和痛苦之后,我发现了问题和可用的选项。问题是我们收到了 401 响应和 www-authenticate http 标头。当服务器发送此信息时,显然 iOS 会尝试弹出一个登录对话框,该对话框被 PhoneGap 阻止。而不是点击错误回调方法,它只是吃掉它,你永远不会得到请求已完成的任何反馈。

最佳解决方案要求您有权访问您正在调用的服务器。如果您这样做了,并且您可以更新响应以不为 401 响应发送 www-authenticate 标头,那么您就是黄金,它可以按预期工作。如果你不能,那么你可以选择在请求中将 async 选项设置为 false。这种方法会在 UI 处阻塞,这并不理想,但如果它只是一个登录请求,则可能是可以接受的。祝你好运。

【讨论】:

以上是关于PhoneGap Ionic 项目未在 iOS 设备上执行 $http.post的主要内容,如果未能解决你的问题,请参考以下文章

媒体未在 iOS phonegap 1.5 应用程序中播放

Phonegap/ngCordova iOS Facebook 登录 ionic 不成功

Ionic / Cordova / Phonegap:有没有办法在iOS和Android上禁用表情符号键盘?

在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件

字体真棒图标未在 Phonegap iOS 应用程序中呈现

Ionic 应用程序未在 iOS 上检测到 iBeacons (cordova-plugin-estimote)