2012-07-30 246 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