2012-07-30 239 views
0

我想使用下面的代碼從網站獲取JSON數據,但是我得到錯誤Uncaught SyntaxError:意外標識符在文件中:///android_asset/www/projectName.html:1 如果我將數據從網站保存爲.json文件,我可以很好地訪問它,但如果從網站訪問它,則不能訪問。我如何從網站上完成這項工作?從外部網站獲取JSON數據

HTML:

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"> 
    </script> 
<script type="text/javascript"> 
     $(document).ready(function(){ 
      $("button").click(function(){ 
      $.get('http://example.ca/log_sheets.json', function(data) { 
       alert('get performed'); 
       var obj = eval ("(" + data + ")"); 
       $("p").html(obj[0].log_sheet.activity_type); 
      }); 
     }); 
    }); 
</script> 
</head> 

<body> 
    <h2>Heading</h2> 
    <p>Display</p> 
    <button>Click me</button> 
</body> 
</html> 

JSON數據的樣本:

[{"log_sheet":{"activity_type":"Normal","activity_value":null,"carbs_value":25.0, ect... }}] 

代碼與PhoneGap的運行html頁面:

package com.example.projectName; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.support.v4.app.NavUtils; 
import org.apache.cordova.*; 

public class MainActivity extends DroidGap { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.loadUrl("file:///android_asset/www/projectName.html"); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 
+2

也許試試'console.log(data)'看看數據obj是什麼樣子 – 2012-07-30 21:04:32

+0

你正在查詢的網站需要支持[CORS](https://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing ),或者需要返回一個可以嵌入到頁面中的'script'元素。 – 2012-07-30 21:05:32

+0

這可能是一個跨域策略問題。另外,eval是邪惡的。 – 2012-07-30 21:06:36

回答

0

如果jQuery認爲您正在檢索JSON(通過服務器提供的mime類型,最後一個參數爲$.get(...,'json')或使用$.getJSON),傳遞給回調函數的數據將已經是JavaScript對象。

在這種情況下,你不會想要eval它。

0
file:///android_asset/www/projectName.html 

鏈接看起來像一個本地文件,因此即使你映射了在你的網絡服務器中作爲應該被預處理的東西,它會按原樣出現。

如果它確實是你的項目的一部分,看起來你必須發佈相關的代碼。

+0

我正在使用phonegap和AVD運行此操作,因此我將發佈運行html文件的內容。 – Alwaysdeadfred 2012-07-30 21:20:58

+0

這應該是所有涉及的代碼... – Alwaysdeadfred 2012-07-30 21:25:35