2012-11-26 67 views
2

我想從Google的Suggest API中提取數據並將其顯示在我的頁面(可能是通過附加功能)。我對解析JSON而不是XML很有信心,並且據我所知Google不提供JSON中的API。使用jQuery讀取XML數據

我該怎麼做? 或者,有誰知道我可以如何在JSON中訪問這個API?如果有人這樣做會很棒!

的API地址是:http://google.com/complete/search?q=google&output=toolbar

我當前的代碼是:

 $.ajax({ 
      type: "GET", 
      url: "http://google.com/complete/search?q=google&output=toolbar", 
      dataType: "xml", 
      crossDomain: true, 
      xhrFields: { withCredentials: true }, 
      success: function(xml) { 
       $(xml).find('toplevel').each(function(){ 
        var title = $(this).find('suggestion').text(); 
        $('<b>'+title+'</b>').appendTo('#page-wrap'); 
       }); 
      } 
     }); 

而且我得到的錯誤是:XMLHttpRequest cannot load http://google.com/complete/search?q=wixiy&output=toolbar. Origin is not allowed by Access-Control-Allow-Origin.

+2

您可以'在.XML文檔中查找(*)數據,就像在DOM中一樣。 – Blazemonger

回答

0

,因爲API不支持JSON,所以你不能這樣做只是在JavaScript,因爲它不會允許跨域請求默認。因此,您將需要一箇中間服務器端頁面,如PHP文件,該文件執行來自google的xml請求並將xml傳遞給您。

的Javascript

$.ajax({ 
    type: "GET", 
    url: "getData.php?q=google&output=toolbar", 
    dataType: "xml", 
    success: function(xml){ 
     $(xml).find("CompleteSuggestion").each(function(){ 
      var suggestion = $(this).find('suggestion').attr('data'); 
      var num_queries = $(this).find('num_queries').attr('int'); 
      alert(suggestion + ' has ' + num_queries + ' queries.'); 
     }); 
    } 
}); 

PHP(訪問getdata.php) - 該文件是在同一臺服務器上

$query = $_GET[ 'q' ]; 
$out = $_GET[ 'output' ]; 

header('Content-Type: text/xml'); 
echo file_get_contents('http://google.com/complete/search?q='.$query.'&output='.$out); 

...要不,你可以直接json_encode它併發送JSON添加到您的腳本中,該腳本也可以輕鬆解析。

希望這會有所幫助。

+0

這種解決方案不會很慢嗎? – user14377

+0

我不這麼認爲,但不能肯定地說。你在你的環境中測試它並自己決定。在我的m/c上適合我。 –

1

沒問題,jQuery的CAN解析XML。退房the $.ajax docs page - 它說

轉換器(增加1.5) 的dataType到的dataType轉換器的地圖。每個轉換器的值都是一個函數,它返回響應的轉換值。

所以你的ajax調用應該只是設置該設置。

$.ajax({ url: "apiUrl", converters: "text xml" }); 
+0

我早些時候嘗試過,但在調試控制檯中出現錯誤。有任何想法嗎? – user14377

+0

嗯...你肯定不應該:D那麼,你可以發佈你的整個調用$ .ajax()和錯誤本身? – Ash

+2

可能是通常的跨站點AJAX失敗。 – Blazemonger