当前位置: 首页 > 知识库问答 >
问题:

AJAX响应在Windows Phone 8.1上的Cordova应用程序中混乱

宰父学
2023-03-14

我们正在使用Cordova 3.4.0开发一个应用程序。在Android和iOS上,以及在桌面浏览器中启动应用程序时,一切都很好。但我们在Windows Phone 8.1上遇到了一个非常奇怪的问题。

这是一个要测试的简化代码示例。

指数应用程序根目录中的html:

<!DOCTYPE html>
<html>
    <head>
        <title>Mobile sandbox</title>
        <meta charset="UTF-8">
        <script type="text/javascript" src="libs/jquery/jquery.min.js"></script>
    </head>
    <body>

        <div id="redbox" style="width:100px;height:100px;background-color:red;">
        </div>

        <div id="greenbox" style="width:100px;height:100px;background-color:green;">
        </div>

        <script>
            $(function () {

                alert("Requesting data for redbox...");

                $.ajax("test/redText.html")
                  .done(function (text) {
                      alert("Filling redbox with contents " + text);
                      $("#redbox").html(text);
                  })
                  .fail(function () {
                      alert("Error in redbox");
                  })
                  .always(function () {
                      alert("Complete redbox");
                  });

                alert("Requesting data for greenbox...");

                $.ajax("test/greenText.html")
                  .done(function (text) {
                      alert("Filling greenbox with contents " + text);
                      $("#greenbox").html(text);
                  })
                  .fail(function () {
                      alert("Error in greenbox");
                  })
                  .always(function () {
                      alert("Complete greenbox");
                  });

            });
        </script>
    </body>
</html>

测试/绿色ext.html:

<span>GREEN</span>

测试/红色文本。html:

<span>RED</span>

运行此测试的唯一依赖项是我们放在libs/jQuery/文件夹中的jQuery。

现在,如果我们在每个桌面浏览器、iOS和Android中运行此代码,无论是从本地文件夹(带有本地AJAX的浏览器标志)还是从服务器,我们都会获得正确的警报序列,AJAX会在适当的框中加载正确的数据:

Requesting data for redbox...
Requesting data for greenbox...
Filling redbox with contents <span>RED</span>
Complete redbox
Filling greenbox with contents <span>GREEN</span>
Complete greenbox

如果我们运行索引,我们会得到相同的结果。通过Internet Explorer在Windows Phone上显示html。

但是当我们将与Cordova应用程序相同的代码部署到Windows Phone时,会发生奇怪的事情。redbox请求从不接收任何数据,也不接收任何错误。Greenbox请求接收redbox的数据,因此我们有空的红框和绿色框,其中包含文本“RED”。以下是警报的顺序:

Requesting data for redbox...
Requesting data for greenbox...
Filling greenbox with contents <span>RED</span>
Complete greenbox

这是怎么回事,为什么一个AJAX请求没有返回,而另一个收到错误的响应?我们如何修复它?

编辑1:

我们的下一步将是找出这是Cordova特定的问题(我看到Corodva WP8模板中有一些XHRHelper对象)还是Microsoft的手机:WebBrowser故障。

编辑2:

看起来,WebBrowser本身不支持对本地文件的AJAX请求(我被“拒绝访问”),这就是Cordova发明XHRHelper类的原因。但我发现了一个相关的错误报告,他们以“无法复制”结尾:https://issues.apache.org/jira/browse/CB-4873

这里是否有任何Cordova开发人员可以建议修复XHRHelper,使其支持多个顺序AJAX请求?

共有1个答案

田巴英
2023-03-14

同样,我不能复制你的结果。我很快整理了一个版本,我会发布到JIRA问题上:https://issues.apache.org/jira/browse/CB-4873

Requesting data for redbox...
Requesting data for greenbox...
Filling redbox with contents 
<span>REd</span>
Complete redbox
Filling greenbox with contents 
<span>GREEN</span>
Complete greenbox

我稍微修改了你的来源,以确保警报干扰没有问题。。。

var eventLog = [];
var oneDone = false;

$(function () {
    eventLog.push("Requesting data for redbox...");
    $.ajax("redText.html")
        .done(function (text) {
            eventLog.push("Filling redbox with contents " + text);
            $("#redbox").html(text);
        })
        .fail(function (e) {
            eventLog.push("Error in redbox" + JSON.stringify(e));
        })
        .always(function () {
            eventLog.push("Complete redbox");
            if (oneDone) {
                console.log(eventLog.join("\n"));
                alert(eventLog.join("\n"));
            }
            else {
                oneDone = true;
            }
        });

    eventLog.push("Requesting data for greenbox...");
    $.ajax("greenText.html")
        .done(function (text) {
            eventLog.push("Filling greenbox with contents " + text);
            $("#greenbox").html(text);
        })
        .fail(function () {
            eventLog.push("Error in greenbox");
        })
        .always(function () {
            eventLog.push("Complete greenbox");
            if (oneDone) {
                console.log(eventLog.join("\n"));
                alert(eventLog.join("\n"));
            }
            else {
                oneDone = true;
            }
        });
});
 类似资料:
  • 混合移动应用程序:PhoneGap和Cordova的区别: 我知道PhoneGap提供PhoneBuild服务来为您构建应用程序,它使用的是cordova的一个版本,但人们发现使用PhoneGap比cordova还有其他好处吗?

  • 我一直在考虑用我的响应式网站创建一个移动应用程序(适用于iOS和Android)。 我知道使您能够做到这一点的开源项目是Apache Cordova,而它最流行的SaaS版本是Adobe PhoneGap。 在看了PhoneGap和它的一些竞争对手之后,我明白他们都以相同的方式工作: 开发人员构建响应式网站。 开发人员使用SasS选项/vanilla Cordova之一将所述网站包装在iOS /A

  • 更新我的Android应用程序的www文件夹(使用Cordova 3.6.3)时,该应用程序会显示我的www的旧缓存版本。 如果我清除应用程序数据(来自Android- 当应用程序更新时(或每次应用程序启动时),如何强制应用程序清除缓存?

  • 问题内容: 由于fxml- files使用Controller类来处理事件,因此如何混淆JavaFX应用程序?当混淆的conntroller类具有不同的名称和路径时,fxml文件将找不到它们。 混淆后编辑fxml文件不是我想要的解决方案。 还有其他选择吗? 问题答案: 没有意义重塑轮子; 快速的google搜索产生了这个网站。 它使用Proguard混淆器。

  • 我一直在使用cordova和HTML开发混合移动应用程序 cordova与reactnative之间的架构差异是什么? 如果有人在这两方面都做过,请分享他们的发现。 谢了,罗希特