2012-03-15 25 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'); 
    } 
}); 
} 

請原諒我的英語水平。

相關問題