1

我正在尝试为我的副项目使用 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));
  }
});
4

3 回答 3

6

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

至少 Yahoo YQL 可以用作代理,正如本示例代码中所做的那样(它是免费的,不需要 API 密钥!)。YQL 返回包装在 中的 Goodreads XML 响应/query/results

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

于 2014-03-09T11:27:45.350 回答
0

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

于 2012-05-01T14:44:57.697 回答
-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() 数据而不解析它。

于 2012-05-01T16:16:20.053 回答