0

我最近陷入了一个奇怪的问题,由 Visual Studio App 中的多平台混合应用程序引发。我的开发环境详细信息如下:

  1. Visual Studio 2013 第 3 版
  2. 科尔多瓦 4.0
  3. Angularjs 1.4
  4. 离子 1.4
  5. 诺基亚 Lumia 1320 [Windows 8.1 操作系统]

我有一个将与移动应用程序交互的网络应用程序,部署在服务器机器上,可以通过内部企业网络以及互联网访问。

现在的问题是,当我 [移动设备] 连接到内部网络时,$http 调用失败,状态码为 0。内部挖掘显示实际返回的状态码为 -1。

但是,当我在手机中切换到移动数据时,ajax 调用顺利并成功完成。现在,如果我切换回内部网络,它会再次开始正常工作。!!!!

http 调用非常简单,并且使用了 Promise API……我也有一些请求拦截器。

对这种奇怪行为的任何解释,或者更合适的解决方案?

4

1 回答 1

0

在挠了我的头 2 多天后,我终于能够得出结论,是我的浏览器是罪魁祸首。

正如我所说,我使用的是 Windows Phone 8.1,它使用 Internet Explorer 11 作为默认渲染。此外,我的 Web 服务器实际上位于代理服务器 [Apache HTTP] 之后。

现在,真正的问题是 ajax 调用返回的响应状态代码为 0。原因是Apache HTTP 代理服务器暂停了 Ajax 调用,因为一些隧道问题。请注意,这特别发生在 IE11 和 Apache HTTP 服务器上。

发生这种情况是因为我在基于 HTTPS 的代理服务器上使用 POST 请求。

现在的解决方案太非技术性了,但这救了我的命。为了从这个问题中挽救你的生命,你必须

1.将您的 POST 请求转换为 GET 请求

2. 或者在向服务器发出 POST 请求之前,向同一服务器发出 GET 请求。

就我而言,我采用了第二种方法,它救了我的命。将此作为答案发布,以便它也可以拯救其他人。

您可以参考以下链接了解更多详情。

  1. IE10/IE11 Abort Post Ajax Request After Clearing Cache with error “Network Error 0x2ef3”</a>

  2. 使用 WinJS 向 HTTPS 域发出 XHR 请求

于 2015-02-05T04:32:45.060 回答