我试图为我的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));
}
});
答案 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()。