如何在XML中解析Goodreads API的响应?

时间:2012-05-01 14:25:19

标签: jquery ajax

我试图为我的sideproject使用Goodreads API但面临一些问题。以下URL返回XML数据。如果我使用datatype: 'xml',则会出现跨域错误,这就是为什么我使用了“jsonp&#39;但仍然会出现Uncaught SyntaxError: Unexpected token <错误。我做错了吗?

$.ajax({
  url : 'http://www.goodreads.com/user/show/userid.xml?key=developerKey&id=userId, 
  method : 'get', 
  dataType : 'jsonp', 
  success : function (data) {
    console.log($.parseXML(data));
  }
});

3 个答案:

答案 0 :(得分:6)

使用支持CORS的外部代理来发出goodreads请求。

至少Yahoo YQL可以用作代理,就像在这个示例代码中一样(它是免费的,不需要API密钥!)。 YQL返回包含在/query/results内的Goodreads XML响应。

var url = "http://www.goodreads.com/user/show/userid.xml" +
          "?key=developerKey&id=userId";

$.get("http://query.yahooapis.com/v1/public/yql",
    {
        q: "select * from xml where url=\""+url+"\"",
        format: "xml"
    },
    function(xml){
        // contains XML with the following structure:
        // <query>
        //   <results>
        //     <GoodreadsResponse>
        //        ...
        console.log(xml);
    }
);

在这个答案中有关YQL的更多信息: https://stackoverflow.com/a/8579158/1068385

答案 1 :(得分:0)

尝试使用'application / xml'。

答案 2 :(得分:-1)

(1)跨域错误消息表明您的应用未正确验证Goodreads。

url : 'http://www.goodreads.com/user/show/userid.xml?key=developerKey&id=userId, 

缺少其结束引用,并且不评估查询字符串的变量。我认为你的意思是

url : 'http://www.goodreads.com/user/show/userid.xml?key=' + developerKey + '&id=' + userId,

(2)看起来您正在从Goodreads服务器获得响应,但您也可能想尝试这样做以确保您获得了您期望的内容:

dataType: 'text'

并且只是在没有解析数据的情况下调用console.log()。