【问题标题】:Using $.getJSON in a WP7 PhoneGap (Cordova) app (v1.5)在 WP7 PhoneGap (Cordova) 应用程序 (v1.5) 中使用 $.getJSON
【发布时间】:2012-03-15 15:23:52
【问题描述】:

我刚刚在 iOS 上完成了一个 PhoneGap 应用程序,现在是时候将它移植到 WP7 上了。应用程序必须做的一件事是读取和解析 JSON 文件。

$.getJSON("xml-json/myfile.json",function(data){ 
 // do cool things
});

但是当执行那行代码时,抛出了一些错误(没有办法调试所以我不知道错误是什么),并且执行不继续。知道该代码有什么问题吗? 该代码在 iOS 版本的 PhoneGap 上完美运行。

在中间窗口中抛出此错误:Log:"Wrapped XHR received Error from FileAPI :: [object Object]"

根据建议,我尝试使用 $.ajax 而不是 $.getJSON。该代码在浏览器和 iOS 上完美运行,但在 WP7 中却不行。像这样简单的东西不起作用:

函数 onDeviceReady() { document.getElementById("welcomeMsg").innerHTML += "Cordova 准备好了!version=" + window.device.cordova; console.log("onDeviceReady。您应该在 Visual Studio 的输出窗口中看到此消息。");

        navigator.notification.alert("readingjson");

        $.support.cors = true;

        $.ajax({
            url: "content2.json",
            dataType: 'json',
            context: document.body,
            success: function (a, b, c) {
                navigator.notification.alert("json readed");
            }
        });

        navigator.notification.alert('yeah');
    }

“readingjson”警报被触发,“是的”也被触发了,但是“json readed”一个ner被触发了......

谢谢!

【问题讨论】:

  • 我已将此作为错误提交给 Cordova 开发人员

标签: windows-phone-7 cordova


【解决方案1】:

除了 $.support.cors,您还需要将 $.mobile.allowCrossDomainPages 设置为 true。

查看jQuery Mobile Docs

【讨论】:

  • 对于 Cordova 2.0,提示:function onDeviceReady() { $.support.cors = true; $.mobile.allowCrossDomainPages = true;
【解决方案2】:

您对错误等不是很具体,但在您的 JSON 调用之前,请尝试设置以下属性:

$.support.cors = true;

【讨论】:

  • 不工作 :( 我怎么能更具体?PhoneGap 不会抛出任何错误或调试信息,它只是冻结...
【解决方案3】:

我使用的是cordova 2.7.0,我遇到了同样的问题。

这不是错误,但这里有一个对我有用的解决方案:

  1. 将您的 javascript 代码移动到单独的文件中并将其包含在您的 html 中以避免烦人的 Visual Studio html 检查器。
  2. 输入“$.support.cors = true;”在ajax调用之前。我将它包含在 deviceready 功能中。
  3. 不要放“$.mobile.allowCrossDomainPages = true;”正如先前答案所建议的那样。就我而言,这条线导致应用程序挂起。

我的代码如下所示:

index.html

<script type="text/javascript" src="js/content.js"></script>
<script type="text/javascript">
  document.addEventListener("deviceready", onDeviceReady, false);

  function onDeviceReady() {
    $.support.cors = true; 
    getContents();
  }
</script>

contents.js

function getContents() {
    $.ajax({
url:"http://www.xxx.com/?getSomething",
    dataType:"json",
    error:function(xhr, status, errorThrown) {
    navigator.notification.alert('Failed', function(){}, 'Info', 'OK');
    },
    success:function(data) {
    navigator.notification.alert('Success!', function(){}, 'Info', 'OK');
    }
});
}

请原谅我的英语。

【讨论】:

    【解决方案4】:

    您没有说明您使用的是哪个 Cordova 版本,但是,v1.4 中有一个相当大的错误,这意味着 XHR 请求失败。这已在 v1.5 中修复 - 请参阅此 JIRA 错误:

    https://issues.apache.org/jira/browse/CB-208

    如果您使用的是 1.5 并且仍然看到问题,这可能是一个新错误!

    【讨论】:

    • 我告诉他们这是一个错误。我希望他们在下一个版本中解决它,或者它可能已经解决了(几个月前)
    【解决方案5】:

    尝试原生 ajax 调用,这将解决问题。

    至少对我有用。

    ~K

    【讨论】:

      【解决方案6】:

      您说您无法获取调试信息,您是在使用 PhoneGap Build 吗?否则,您应该会在 Visual Studio 的“输出”窗口中看到应用程序的日志记录(确保显示的是“调试”的输出)。

      如果您只是在 Visual Studio 中使用 PhoneGap,请确保 JSON 文件作为内容项包含在项目中,并且您的 CordovaSourceDictionary.xml 文件在构建时使用这些项进行更新。

      见:https://stackoverflow.com/a/8902502/1441046

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        • 2013-04-02
        • 2017-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多