Android Cordova主干应用程序-Ajax请求在LG G4s和x2B上失败;三星S7无线上网

Android Cordova主干应用程序-Ajax请求在LG G4s和x2B上失败;三星S7无线上网,android,jquery,ajax,cordova,backbone.js,Android,Jquery,Ajax,Cordova,Backbone.js,问题 我有一个内置于backbone.js和Cordova的应用程序。在非常特殊的情况下,它在发出Ajax请求时会遇到问题——具体来说,这个问题只发生在开启Wifi的LG G4(和三星S7)上。它可能在其他手机上有问题,但到目前为止,我只测试了4款手机。我正在使用jQuery进行Ajax调用 我所说的Ajax请求问题是指请求实际上失败了。在“网络”选项卡上的“我的开发人员工具”中,状态显示为(失败)。如果我在控制台上记录XHR.status,它将显示一个0 如果我将抛出的错误记录在控制台日志中,

问题

我有一个内置于backbone.js和Cordova的应用程序。在非常特殊的情况下,它在发出Ajax请求时会遇到问题——具体来说,这个问题只发生在开启Wifi的LG G4(和三星S7)上。它可能在其他手机上有问题,但到目前为止,我只测试了4款手机。我正在使用jQuery进行Ajax调用

我所说的Ajax请求问题是指请求实际上失败了。在“网络”选项卡上的“我的开发人员工具”中,状态显示为(失败)。如果我在控制台上记录XHR.status,它将显示一个0

如果我将抛出的错误记录在控制台日志中,我会得到以下结果

DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'https://mywebsite.com/Unicorn/API/FooBar.svc/JSON/DoThisPlease?var1=whatisone&var2=morestuff&clientInfo=Android%20undefined%206.0'
代码

我请求的代码如下

function doSomeAjaxCall(successCallback, failureCallback) {
        var deviceInfo = getDeviceInfo();
        var request_url = baseUrl + "DoThisPlease?var1=" + encodeURIComponent(varA) + "&var2=" + encodeURIComponent(varB) + "&deviceInfo=" + encodeURIComponent(deviceInfo);
        $.ajax({
            url:request_url,
            async:false,
            success:function (json) {
                if (json === "") {
                    failureCallback("Invalid email and/or password");
                } else {
                    successCallback(json);
                }
            },
            error:function (jqXHR, textStatus, errorThrown) {
                if (jqXHR.status === 404)
                    failureCallback('The API was not found at this URL');
                else if (jqXHR.status === 0)
                    failureCallback('Cannot connect to PD, make sure your device is online.');
                else
                  failureCallback('Server Responded with: ' + jqXHR.statusText);
            }
        });
    }
我尝试过的事情

需要注意的是,如果我获取请求url并将其粘贴到web浏览器中,它也不会在Wifi上工作

话虽如此,一旦我禁用Wifi,数据就会接管一切。我已在以下数据设置中尝试了该应用程序:

  • Wifi打开数据打开结果失败
  • Wifi打开数据关闭结果失败
  • Wifi关闭数据打开结果有效
我试过的电话

  • 三星S6安卓6.0.1适用于所有数据配置
  • LG G3安卓6.0适用于所有数据配置
  • Lg G4安卓6.0出现故障(Wifi开启,请参见上述配置)
  • 三星S7安卓6.0.1出现故障(Wifi开启,请参见上述配置)
所有设备上的Chrome版本均为53.0.2785.124

我不太明白为什么会发生这个问题。关于这个问题的任何反馈或调试Cordova应用程序都很好

我目前正在通过ADB使用chrome的inspector进行调试,并将手机插入USB

编辑10/20

根据@Gandhi的建议,我尝试了其他API。我能够在另一台机器上点击API——我使用了美联储的经济数据API。我尝试在同一台机器上使用不同的API,但它的错误与尝试向原始API发出AJAX请求时的错误相同。我还对三星Galaxy S7进行了测试,结果与LG G4相同

想法1:我有一个IIS服务器,我开始怀疑是新安卓手机(型号,而不是安卓软件版本)或IIS服务器出现了某种配置问题导致了这个问题


想法2:我今天要做一些测试,试着用手机走出办公室,在另一个网络上尝试Wifi连接。我想知道在某些手机型号上发出网络请求的方式是否会与我们的网络发生不同的交互。我不是安卓操作系统本身的专家,但我认为手机型号并不重要,因为安卓操作系统(安卓版本)会处理请求(仅使用手机型号的硬件),并符合请求的某些标准。不管怎样,我今天要尝试一下,并根据结果进行更新。

一个快速猜测是,这是一个奇怪的手机问题,可能与主干网或cordova无关。@Jake按照您的以下几句话——“应该注意的是,如果我将请求url粘贴到web浏览器中,它在Wifi上也不会工作。”我想这应该是你的wifi的问题。你测试过通过wifi对其他URL的ajax调用吗?@Gandhi,这是一个很好的建议。我试着点击一个不同的API——仅仅是一个来自美联储经济数据的API——并且不管Wifi配置如何都能得到响应。我还尝试在同一台服务器上使用API。这不起作用。我还可以用另一台设备三星S7进行一些测试,同样的问题也会出现在G4.UPDATE上:我知道这是一个更晚的更新。我们最终确定了特定Wifi连接的问题。导致这个问题的Wifi点之间没有任何相似之处,但似乎它可能基于不同网络设置的安全策略。奇怪的是,它只影响我们的主干cordova应用程序,而不影响我们的其他应用程序。如果我们弄清楚具体的网络配置,我们会选择一个答案。一个快速的猜测是,这是一个奇怪的手机问题,可能与主干网或cordova无关。@Jake按照你下面的话——“应该注意的是,如果我将请求url粘贴到web浏览器中,它在Wifi上也无法工作。”我想这应该是你的wifi的问题。你测试过通过wifi对其他URL的ajax调用吗?@Gandhi,这是一个很好的建议。我试着点击一个不同的API——仅仅是一个来自美联储经济数据的API——并且不管Wifi配置如何都能得到响应。我还尝试在同一台服务器上使用API。这不起作用。我还可以用另一台设备三星S7进行一些测试,同样的问题也会出现在G4.UPDATE上:我知道这是一个更晚的更新。我们最终确定了特定Wifi连接的问题。导致这个问题的Wifi点之间没有任何相似之处,但似乎它可能基于不同网络设置的安全策略。奇怪的是,它只影响我们的主干cordova应用程序,而不影响我们的其他应用程序。如果我们弄清楚具体的网络配置,我们将选择一个答案。