3

在下面的 JavaScript 中,reqListener回调(用于 XHR 调用)在运行 Android 4.1 和 Android 4.2 的三星硬件上的 PhoneGap/Cordova 应用程序中使用时永远不会运行。它在 Android 2.x 和 iOS 中运行良好。我究竟做错了什么?(我希望这是显而易见的。如果这意味着得到修复,我可以对此感到愚蠢。)

function reqListener (result) {
    var resultElement = document.getElementById('results');
    var resultText = JSON.stringify(result, null, 4);
    if ("textContent" in resultElement) {
        resultElement.textContent = resultText;
    } else {
        resultElement.innerText = resultText;
    }
};

var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.open('GET', 'http://apis.ucsf.edu/shuttle/stops');
oReq.send();

演示该问题的应用程序的完整源代码(如果您想查看config.xml或在 PhoneGap Build 上构建它以查看它是否为您自己工作)位于https://github.com/Trott/XHRBugindex.html除了and之外,它都是库存的东西config.xml

4

1 回答 1

1

我将我的实现与 ZeptoJS 所做的进行了比较,并将其更改为下面的代码,现在可以与之前失败的 Galaxy S4 + PhoneGap 组合一起使用。

我认为成功的部分是:

  • 避免onloadonreadystatechange使用
  • 在 readyState 为 4 的情况下触发后,手动取消设置 readystatechange 回调

现在代码:

<title>Simple XHR Test</title>

<h1>Simple XHR Test</h1>
<p id="results">Running the simple XHR test...</p>

<script>
function reqListener (resultText) {
    var resultElement = document.getElementById('results');
    if ("textContent" in resultElement) {
        resultElement.textContent = resultText;
    } else {
        resultElement.innerText = resultText;
    }
};

var oReq = new window.XMLHttpRequest();
oReq.onreadystatechange = function () {
    if (oReq.readyState === 4) {
        oReq.onreadystatechange = function () {};
        reqListener(oReq.responseText);
    }
}
oReq.open('GET', 'http://apis.ucsf.edu/shuttle/stops');
oReq.send(null);
</script>
于 2013-10-14T05:50:41.030 回答