在 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的主要内容,如果未能解决你的问题,请参考以下文章