2013-06-12 23 views
0

我想从我找到的Google API获取一些数据。麻烦的是我找不到这个ASP的文档(它一定是秘密的)。出于某种原因,我无法从以下链接中提取JSON数据。显示在我的JSFiddle使用jQuery获取Json数据意外的令牌:

我收到错误

http://www.google.com/ig/calculator?hl=en&q=1GBP=?USD&callback=? 

我的错误:“未捕获的SyntaxError:意外的标记:”

任何帮助将是巨大的。

回答

0

计算器API不会返回有效的JSON。标签不被引用,因此不能直接解析。你可以做的唯一的事情是在让jQuery解析JSON之前,尝试手动将引号添加到标签。这将使其有效。

{lhs: "1 British pound",rhs: "1.5637 U.S. dollars",error: "",icc: true} 
^ no quotes 

下面是一个快速和肮脏的解决方案,来替换每一个标签,自身并添加引号。这不是很健壮,因为每个标签都是硬编码的,但它应该给你正确的想法。

 var data = '{lhs: "1 British pound",rhs: "1.5637 U.S. dollars",error: "",icc: true}';    
      data = data.replace('lhs:', '"lhs":'); 
      data = data.replace('rhs:', '"rhs":'); 
      data = data.replace('error:', '"error":'); 
      data = data.replace('icc:', '"icc":'); 

      data = JSON.parse(data); 

      for(i in data) { 
       content = data[i]; 
       $("#data-list").append(content.text + "<hr />"); 
      } 

为了解决相同的原始策略,我会通过同一个域上的服务器端脚本代理API请求。

jQuery支持JSONP,但问题是jQuery会在我们修改它之前尝试解析JSON。

+0

感谢您的回答,但是这仍然似乎并不奏效。当在JSFiddle中测试时,我收到以下错误:“原始http://fiddle.jshell.net不被Access-Control-Allow-Origin允许。” –

+0

是的,因为跨域请求,它不会工作。我会通过服务器端脚本代理请求,例如PHP或ASP。因此,您的ajax调用服务器端,服务器执行API请求,并返回到Javascript。这将绕过交叉来源政策 – MrCode