使用jQuery读取XML数据

时间:2012-11-26 18:56:11

标签: javascript jquery xml json

我想从Google的Suggest API中提取数据并将其显示在我的页面中(可能通过追加功能)。我对解析JSON而不是XML很有信心,据我所知,谷歌不提供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.

3 个答案:

答案 0 :(得分:1)

当然,jQuery CAN 解析XML。查看the $.ajax docs page - 它说

  

转换器(已添加1.5)   dataType-to-dataType转换器的映射。每个转换器的值都是一个返回响应的转换值的函数。

所以你的ajax调用应该只设置那个设置。

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

答案 1 :(得分:0)

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

var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");

答案 2 :(得分:0)

由于API不支持JSON,因此您无法在javascript中执行此操作,因为默认情况下它不允许跨域请求。因此,您需要一个像PHP文件这样的中间服务器端页面,它从谷歌处理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发送到您的脚本,也可以轻松解析。

希望这有帮助。