我正在使用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,我得到了响应,这又是一个错误,但至少我收到了回复。因此,总结一下它在浏览器中本地工作,它可以在iOS设备上使用GET请求和PORT,但是当我使用POST方法时它不会发出任何请求。我确实试图逃过结肠,但这没有帮助。我很困惑这个,所以任何想法都值得赞赏。谢谢!
答案 0 :(得分:0)
经过多次痛苦之后,我发现了问题和可用的选择。问题是我们得到了401响应和www-authenticate http标头。当服务器发送此信息时,iOS会尝试弹出一个登录对话框,该对话框被PhoneGap阻止。它不是点击错误回调方法,而是只吃它而你永远不会得到任何反馈请求已经完成。
最佳解决方案要求您可以访问您正在呼叫的服务器。如果你这样做,并且你可以更新响应,不发送401响应的www-authenticate标题,那么你是金色的,它按预期工作。如果不能,则可以选择将async选项设置为false。这种方法将阻止在UI,这是不理想的,但如果它只是一个登录请求可能是可接受的。祝你好运。