【问题标题】:jQuery $.ajax - how do I build the get request for this API?jQuery $.ajax - 我如何构建这个 API 的获取请求?
【发布时间】:2016-11-05 16:13:10
【问题描述】:

我正在尝试调用此 API 并返回一个 json 对象。我想为我传入的标签返回一个最佳回答者数组。我在 $.ajax 调用中构建字符串时遇到问题。

API 链接--> http://api.stackexchange.com/docs/top-answerers-on-tags

此代码有效:

console.log(
$.ajax({
    url: "http://api.stackexchange.com/2.2/tags/jquery/top-answerers/all_time?site=stackoverflow",
    dataType: "jsonp",
    type: "GET",
}));

但是这段代码不起作用。它在控制台中抛出错误“Uncaught SyntaxError: Invalid or unexpected token”

var getTopAnswerers = function(tag) {
// tag is a string passed in via the html form
// the parameters we need to pass in our request to StackOverflow's API
var request = { 
    tag: tag,
    period: 'all_time',     
    site: 'stackoverflow',
};
$.ajax({
    url: "http://api.stackexchange.com/2.2/tags{tag}/top-answerers/",
    data: request,
    dataType: "json",
    type: "GET",
})

所以我尝试对标签值进行硬编码,但仍然没有运气。 API 返回一个标签对象列表,就像是一个问题标签列表。 http://api.stackexchange.com/2.2/tags?tag=jquery&period=all_time&site=stackoverflow.

var getTopAnswerers = function() {
var request = { 
    tag: 'jquery',
    period: 'all_time',     
    site: 'stackoverflow',
};
$.ajax({
    url: "http://api.stackexchange.com/2.2/tags",
    data: request,
    dataType: "json",
    type: "GET",
})
};

我也尝试在 json 和 jsonp 之间切换 dataType。

TL;DR:请帮助我为 $.ajax 构建正确的字符串以与 API 交互。

编辑: 有人指出我有一些错误的逗号。修复了逗号仍然不生成字符串。

var getTopAnswerers = function() {
var request = { 
    tag: 'jquery',
    period: 'all_time',     
    site: 'stackoverflow'
};
$.ajax({
    url: "http://api.stackexchange.com/2.2/tags",
    data: request,
    dataType: "json",
    type: "GET"
})
};

【问题讨论】:

  • 尝试中的 URL 与有效的不匹配
  • 我列出了简单易懂的 'what works' 网址,因此人们对我正在尝试构建的内容有所了解。
  • 然后您需要使用 api 文档来获取自己的 url 参数,然后让您的代码构建正确的 url。像 Postman 这样的 Rest 客户端将节省您测试参数和结果的时间
  • 如果我能通过 api 文档自己弄清楚,我就不会在这里寻求帮助。我想出了足够多的 youtube API 来获得我需要的东西,但是这个特定的 API 期望构建字符串的方式让我很难过。
  • 这就是为什么你在像邮递员这样的休息客户端中玩,这样你就可以立即测试而无需在浏览器中加载。然后逆向工程在那里工作

标签: jquery stackexchange-api


【解决方案1】:

解析 Deferred 对象时需要调用处理程序

function getTopAnswerers(tag) {
  var request = {
    site: 'stackoverflow'
  };
  $.ajax({
    url: "http://api.stackexchange.com/2.2/tags/"+tag+"/top-answerers/all_time",
    data: request,
    dataType: "json",
    type: "GET"
  }).done(function(data) {

    console.log(data);

  });
}

getTopAnswerers('jquery');
getTopAnswerers('html');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

【讨论】:

  • 这个 sn-p 得到了和我一样的坏数据 - 问题标签列表。
  • @DefectAssassin 你能提供你想要的结果格式吗?
  • @KId - 我在“有效代码”部分中放了一个 URL 示例。这里是:api.stackexchange.com/2.2/tags/jquery/top-answerers/… 谢谢。
  • @KId Ahh,所以在 API 文档中,当他们说“/tags/{tag}/top-answerers/{period}”时,大括号意味着必须是特定的字符串片段通过某种变量显式传入,在通常的参数之外。
  • 是的,它是一个 REST API url,而不是 url 参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2013-11-27
  • 2012-11-06
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多