2

我想从 Google 的 Suggest API 中提取数据并将其显示在我的页面中(可能通过 append 函数)。我对解析 JSON 而不是 XML 很有信心,而且据我所知,Google 没有在 JSON 中提供这个 API。

我怎样才能做到这一点?或者,有谁知道我如何在 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.

4

3 回答 3

1

当然,jQuery可以解析XML。查看$.ajax 文档页面- 它说

转换器(添加 1.5) 数据类型到数据类型转换器的映射。每个转换器的值都是一个返回响应的转换值的函数。

因此,您的 ajax 调用应该只设置该设置。

$.ajax({ url: "apiUrl", converters: "text xml" });
于 2012-11-26T19:01:33.037 回答
0

您可以使用 DomParser https://developer.mozilla.org/en-US/docs/DOM/DOMParser

var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
于 2012-11-26T19:03:08.503 回答
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 发送到您的脚本,该脚本也可以轻松解析。

希望这可以帮助。

于 2012-11-26T19:25:58.480 回答