在 WP7 PhoneGap (Cordova) 应用程序 (v1.5) 中使用 $.getJSON

Posted

技术标签:

【中文标题】在 WP7 PhoneGap (Cordova) 应用程序 (v1.5) 中使用 $.getJSON【英文标题】:Using $.getJSON in a WP7 PhoneGap (Cordova) app (v1.5) 【发布时间】: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 开发人员 【参考方案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,我遇到了同样的问题。

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

    将您的 javascript 代码移动到单独的文件中并将其包含在您的 html 中以避免烦人的 Visual Studio html 检查器。 输入“$.support.cors = true;”在ajax调用之前。我将它包含在 deviceready 功能中。 不要放“$.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://***.com/a/8902502/1441046

【讨论】:

以上是关于在 WP7 PhoneGap (Cordova) 应用程序 (v1.5) 中使用 $.getJSON的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap/Cordova 中的本地通知

Cordova/PhoneGap - 通过应用商店验证

PhoneGap / Cordova 回调错误 - 在 PhoneGap 中未执行 RestKit 完成功能

Cordova/Phonegap - 风景

PhoneGap/Cordova 设备未准备好

Phonegap/Cordova 代码在构建时不断重置