我试图以jsonp作为数据类型访问Stackoverflow API:
$(document).ready(function(){
$.ajax({
url: 'http://api.stackoverflow.com/1.1/tags/php/top-answerers/month',
dataType: 'jsonp',
});
});
一旦我重新加载,我在控制台中得到以下内容:
"Uncaught SyntaxError: Unexpected token :"
我在这里做错了什么?
答案 0 :(得分:0)
来自https://api.stackexchange.com/docs
所有API响应都是JSON,我们使用回调查询参数支持JSONP。 API中的每个响应都在一个通用的“包装器”对象中返回,以便更容易和更一致地进行解析。
因此,您应该使用dataType: 'json'
而不是jsonp
。
您还应该升级到2.1 API,1.x API已被弃用6个月。
答案 1 :(得分:0)
现在,应用程序返回Content-Type:application/json
。
您可以通过将回调函数名称覆盖到jsonp
来解决此问题,这将告诉服务器返回Content-Type:application/javascript
:
$(document).ready(function () {
$.ajax({
url: 'http://api.stackoverflow.com/1.1/tags/php/top-answerers/month',
dataType: 'jsonp',
jsonp: 'jsonp',
success: function (data) {
alert(data.top_users.length + ' users retrieved.');
}
});
});
有关jsonp ajax设置的信息:
<强> jsonpString 强>
覆盖jsonp请求中的回调函数名称。这个值 将在'callback =?'中使用而不是'callback'的一部分 在url中查询字符串。所以{jsonp:'onJSONPLoad'}会导致 'onJSONPLoad =?传递给服务器。从jQuery 1.5开始,设置 jsonp选项为false可防止jQuery添加“?回调” 字符串到URL或尝试使用“=?”转型。在 在这种情况下,您还应该显式设置jsonpCallback设置。 例如,{jsonp:false,jsonpCallback:“callbackName”}