【问题标题】:PhoneGap Ionic project not performing $http.post on iOS devicePhoneGap Ionic 项目未在 iOS 设备上执行 $http.post
【发布时间】: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 尝试过,但遇到了同样的问题

标签: ios angularjs cordova ionic


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多