2013-06-12 21 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