【问题标题】:How to parse Goodreads API's response in XML?如何在 XML 中解析 Goodreads API 的响应?
【发布时间】:2012-05-11 01:30:18
【问题描述】:

我正在尝试将 Goodreads API 用于我的副项目,但遇到了一些问题。以下 URL 返回 XML 数据。如果我使用datatype: 'xml',那么我会得到跨域错误,这就是为什么我使用'jsonp'但仍然得到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));
  }
});

【问题讨论】:

  • 这里是one possible solution
  • @MichaelMior :不走运。 “Access-Control-Allow-Origin 不允许 Origin null。”
  • 这不可能发生,因为代理脚本将在您的域上运行。在这种情况下,您只需向同一个域发出常规 JSON 请求。
  • 我在本地运行上面的代码,url返回xml数据。在发出常规 JSON/text/xml 请求时,我收到“跨域”错误。
  • 这表明您不能向自己的域发出任何 AJAX 请求。在这种情况下,发生了一些奇怪的事情。

标签: jquery ajax


【解决方案1】:

使用支持 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

【讨论】:

    【解决方案2】:

    尝试改用“应用程序/xml”。

    【讨论】:

    • 不走运。 “Access-Control-Allow-Origin 不允许 Origin null。”
    【解决方案3】:

    (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() 数据而不解析它。

    【讨论】:

    • 不走运。 “Access-Control-Allow-Origin 不允许 Origin null。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多