2012-03-15 28 views
2

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

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

但被执行的代码行的时候,一些错误被抛出(有没有办法来调试,所以我不知道是什么错误),而执行不下去。任何想法在代码中有什么错误? 该代码完美适用于iOS版本的PhoneGap。

这个错误被抛出在Inmediate窗口:日志:“痴迷XHR收到的错误从FileAPI :: [对象的对象]”

建议之后,我试图用$就不是$。的getJSON。代码在浏览器和iOS上完美工作,但不在WP7中。一些简单的像这不起作用:

功能onDeviceReady(){ 的document.getElementById( “welcomeMsg”)的innerHTML + = “!科尔多瓦就绪版本=” + window.device.cordova; (“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被炒鱿鱼......

谢谢!

+0

我已经提交这个bug作为科尔多瓦开发者 – xus 2012-06-07 10:50:04

回答

0

你没有说明您正在使用的版本科尔多瓦,然而,v1.4中存在一个相当大的bug,这意味着XHR请求失败。这是固定在1.5版 - 看到这个JIRA错误:

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

如果您使用的1.5,仍然可以看到的问题,这可能是一个新的bug!

+0

我使用1.5!: - S – xus 2012-03-16 10:58:40

+0

我告诉他们这是一个bug,我希望他们能够在下一个版本中解决它,或者它已经解决了(这是几个月前) – xus 2012-08-09 11:59:09

0

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

至少它为我做了。

〜ķ

1

你是不是很具体,出现错误等,但你的JSON调用之前尝试设置以下属性:

$.support.cors = true; 
+0

不工作:(我怎么能更具体?PhoneGap不会抛出任何错误或调试信息,它只是冻结... – xus 2012-03-16 10:59:30

0

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

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

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

3

随着$ .support.cors,你还需要设置$ .mobile.allowCrossDomainPages为true。

使用科尔多瓦2.7.0和我有同样的问题,检查jQuery Mobile Docs

+1

Cordova 2.0,提示:function onDeviceReady(){$。 support.cors = true; $ .mobile.allowCrossDomainPages = true;' – 2012-09-15 23:58:59

1

林。

这是不是一个错误,但这里是为我工作的解决方案:

  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'); 
    } 
}); 
} 

请原谅我的英语水平。

相关问题