使用XMLHttpRequest后,PhoneGap应用程序在网络更改后冻结/锁定

时间:2017-07-18 15:33:21

标签: php html xmlhttprequest phonegap

我有一个在后端使用PHP的Adobe PhoneGap应用。网络更改后(如Wifi - > 4G),只要有XMLHttpRequest(或与服务器通信),应用程序就会崩溃。如果我让应用程序坐下来"冻结" 3分钟后,应用程序继续正常工作。我在一部安卓手机上进行测试,其中包含一个内置的'的apk。

我尝试过/正在做什么。这是在我的配置文件

    <plugin name="cordova-plugin-whitelist" source="npm" spec="https://github.com/apache/cordova-plugin-whitelist" />
    <allow-intent href="http://*/*" />
    <allow-intent href="*://*api.parse.com/*"/>

And here is what my code looks like that is communication with PHP 

    function getProducts() {
      var url = 'http://www.*.com/*/*/getProducts.php';
      var params = "ID=1" + 

      var xhr = new XMLHttpRequest();

      xhr.open('GET', url + "?" + params, false);
      xhr.addEventListener("readystatechange", processRequest, false);

      function processRequest(e) {
       if (xhr.readyState == 4 && xhr.status == 200) {
         document.getElementById("results").innerHTML = xhr.response;
       }
     }

     xhr.send(params);
    }

之前是否有其他人遇到此问题?

这是我正在使用的所有插件

    <preference name="android-minSdkVersion" value="14" />
    <plugin name="cordova-plugin-console" source="npm" spec="https://github.com/apache/cordova-plugin-console" />
    <plugin name="cordova-plugin-device" source="npm" spec="https://github.com/apache/cordova-plugin-device"/> 
    <plugin name="cordova-plugin-device-orientation" source="npm" spec="https://github.com/apache/cordova-plugin-device-orientation" />
    <plugin name="cordova-plugin-dialogs" source="npm" spec="https://github.com/apache/cordova-plugin-dialogs" />
    <plugin name="cordova-plugin-geolocation" source="npm" spec="https://github.com/apache/cordova-plugin-geolocation" />
    <plugin name="cordova-plugin-globalization" source="npm" spec="https://github.com/apache/cordova-plugin-globalization" />
    <plugin name="cordova-plugin-inappbrowser" source="npm" spec="https://github.com/apache/cordova-plugin-inappbrowser" />
    <plugin name="cordova-plugin-splashscreen" source="npm" spec="https://github.com/apache/cordova-plugin-splashscreen" />
    <plugin name="cordova-plugin-network-information" source="npm" spec="https://github.com/apache/cordova-plugin-network-information" />
    <plugin name="cordova-plugin-statusbar" source="npm" spec="https://github.com/apache/cordova-plugin-statusbar" />
    <plugin name="cordova-plugin-whitelist" source="npm" spec="https://github.com/apache/cordova-plugin-whitelist" />

编辑:看起来我的应用程序没有进入函数processRequest

Edit2:看来这个bug只是android。我在Apple iPhone 6上测试过它并没有问题。我还将getProducts函数更改为onreadystatechange类型。它现在没有锁定应用程序,但它没有加载PHP结果,直到我打开/重新打开页面6次。 XMLHttpRequest.readyState属性返回1,但不会返回2,3或4(直到6次之后)。

2 个答案:

答案 0 :(得分:0)

尝试重新安装network-information插件。

cordova plugin rm org.apache.cordova.network-information
cordova plugin add https://github.com/apache/cordova-plugin-network-information

可能有所帮助。

P.S。如果navigator.connection.type已更改,请尝试重新启动所有请求 并且不要忘记,在Cordova 2.3.0 navigator.connection.type之后更改为navigator.connection

答案 1 :(得分:0)

我在另外两个wifi网络上测试了这个,无法复制这个问题。也许防火墙问题?或者PHP文件/服务器在该wifi网络上的事实。