1

我正在尝试通过执行以下操作以 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 :"

我在这里做错了什么?

4

2 回答 2

0

来自https://api.stackexchange.com/docs

所有 API 响应都是 JSON,我们确实支持带有回调查询参数的 JSONP。API 中的每个响应都在一个通用的“包装器”对象中返回,以便更轻松、更一致地解析。

所以你应该使用dataType: 'json'而不是jsonp.

您还应该升级到 2.1 API,1.x API 已弃用 6 个月。

于 2012-11-12T21:57:45.440 回答
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 将“?callback”字符串添加到 URL 或尝试使用“=?”。为转型。在这种情况下,您还应该明确设置 jsonpCallback 设置。例如,{ jsonp: false, jsonpCallback: "callbackName" }

于 2012-11-12T22:40:17.727 回答