javascript - Ajax 调用失败,但仅在特定的手机运营商上

标签 javascript ajax

我有一个运行在 www.example.com 的网站。加载页面时,会获取一个 JavaScript 文件,该文件对 xyz.subdomain.example.com 进行 Ajax 调用。

一切都适用于我测试过的每个平台/浏览器,除了一个。当我在我的 Android 手机上运行它时,一切都失败了(无论使用什么浏览器,尽管如果我启用 WiFi 一切正常)。但是,我妻子的手机连接到不同的运营商(是的,我们有 2 家公司 - 说来话长),一切正常。

当事情失败时,我收到的状态为 0,没有其他文本。我的直觉是这可能是一个 CORS 问题,但谁来做决定呢?我假设浏览器可以,我相信操作系统,但我不能接受运营商这样做。

对于发生的事情还有其他解释吗?知道如何解决这个问题吗?

编辑

我取得了一点点进步,但还没有解决问题。感谢所有提供帮助的人。

我原来的解释有点简化。我实际上是在尝试访问 random.xyz.subdomain.example.com,然后观察 DNS 服务器(由我控制)发生了什么。

无论如何,我决定安装 termux,它很棒。这是我发现的:

dig random.xyz.subdomain.example.com

正确解析。 FWIW,这里使用的是 Google DNS。

curl random.xyz.subdomain.example.com

收到错误:curl: (6) 无法解析主机 random.xyz.subdomain.example.com

好吧,这是出乎意料的。域通过 dig 解析,但 curl 有问题。

此时我打开手机上的WiFi

curl random.xyz.subdomain.example.com

正确返回一堆数据

这看起来有点奇怪。我认为这意味着运营商不是问题,电话才是。或者更具体地说,手机中的移动代码,因为 WiFi 运行良好。这是正确的吗?我还应该测试什么?

如果这意味着什么,该手机是运行 Android 5.1.1 的三星 Galaxy Grand Prime (SM-G530W)

编辑 2

我对 dig 和 curl 之间的不同行为感到困扰,并开始研究它。我确实看到有人提到这个问题但没有完全解决它。我还注意到,我在手机上发现的行为也可以从库存 AWS Linux 实例中复制。

我还意识到,解析控制 random.xyz.subdomain.example.com 区域的名称服务器名称的过程非常复杂。它包括通过 3 家不同公司控制的资源跟踪一些 CNAME。整个过程有效,但在某些情况下显然无效。

无论如何,我简化了这个名称服务器名称的解析,现在到处都可以正常工作了。我认为最终的问题是 Linux 网络深处的一些旧的和错误的库没有正确解析或处理一些很少发生的情况。

最佳答案

在 android 上有很多方法可以调试这个问题,最简单的可能是将 chrome 的远程调试器连接到有问题的手机,然后检查控制台和网络选项卡以获得进一步的解释。

如果没有帮助,请用谷歌搜索您的 isp/手机提供商、手机型号,以防它是一个已知的“功能”。

您可以从服务器的 Angular 查看您的远程 ip,或者只问 google“我的 ip 是什么”,“我的用户代理是什么”。安全/隐私/其他好意或恶意(有时是系统)应用程序可能会劫持 http 流量。

如果最终证明是网络问题,并且您熟悉控制台,那么获取像 termux 这样的应用程序可能会有很大帮助。 curl、ping、traceroute 等标准工具可能有助于确定根本原因。

关于javascript - Ajax 调用失败,但仅在特定的手机运营商上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358894/

相关文章:

javascript - 如何循环表行以导出 CSV 中的值

javascript - 深度克隆 Backbone.js 模型

jquery - 如何避免 jPlayer 中不必要的缓冲

javascript - jQuery 的 AJAX 包装器

javascript - 如何以编程方式从 ng-table 中选择第一行?

javascript - 如何在 GAS 功能真正结束后运行功能?

javascript - 点击注册按钮后生成一个随机数

javascript - Select2 通过 AJAX 加载 JSON 结果集并在本地搜索

javascript - 通过 API 获取 tumblr 照片帖子内容,但对于照片集帖子的排列方式有所不同

javascript - 如何打印从 $_POST 从 javascript 传输到 php 的数组