javascript - getJSON 对象的 responseJSON 未定义?

标签 javascript request response

鉴于以下情况:

$(function() {
    function getTopMod(e) {
        var requesturl = '/r/lol/about/moderators.json';
        console.log(requesturl);
        var response = $.getJSON(requesturl);
        console.log(response);
        var responsedata = response.responseJSON;
        console.log(responsedata);
        var mods = responsedata.data.children;
        try {
            var topmod = mods[0].name;
            var url = document.location.origin + "/user/" + topmod;
        } catch(err) {
            var url = document.location.origin + requesturl;
        }
        console.log(url);
        //return false;
    }
    $(document).on("click", 'li.view-top-mod a', getTopMod)
});

请求url被正确记录;响应也是如此。但是当尝试记录 responsedata 时,它是未定义的(因此,在下一行抛出错误,因为没有数据属性)。但是,如果我在浏览器控制台中手动键入这些行:

var foo = $.getJSON('/r/lol/about/moderators.json');
var biz = foo.responseJSON;
biz

responseJSON 对象是否正确返回(如果这是正确的术语)?我将如何解决该错误?

最佳答案

$.getJSON 是异步的。这意味着,你告诉它取东西,然后它会在一段时间后交付。如果您在控制台中执行此操作,它有足够的时间在您请求结果之前运行差事。如果您按照您的方式在代码中执行此操作,则要求它获取数据,然后立即要求返回数据;但是您问的是稀薄的空气,因为 JSON getter 仍然在执行任务。你需要让它在完成时告诉你:

$.getJSON(requesturl, function(response) {
  // everything your code had after `$.getJSON` goes in here.
});

关于javascript - getJSON 对象的 responseJSON 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727286/

相关文章:

javascript - 网站的 Facebook 登录 : Best practice to handle user Facebook logout?

javascript - 使用工作箱运行时缓存,请求不会显示在 chrome 的缓存存储中

node.js - Express 应用程序中任何参数的 req.body 均返回为未定义

api - Google map 网站和 API : different results

java - OkHttpClient 获取响应正文

php - 从 php 检索值?

javascript - YAML 文件中的换行符

ios - AFNetworking - 请求和图像的缓存时间如何工作?

java - response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有什么区别

javascript - 在 JavaScript 中使用 block 的返回值