getJSON对象的responseJSON是未定义的?

13s*_*inj 1 javascript response request

鉴于以下内容:

$(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)
});
Run Code Online (Sandbox Code Playgroud)

请求网址已正确记录; 响应也是如此.但是当尝试记录responsedata时,它是未定义的(因此,由于没有数据属性,因此会在下一行引发错误).但是,如果我要在浏览器控制台中手动键入这些行:

var foo = $.getJSON('/r/lol/about/moderators.json');
var biz = foo.responseJSON;
biz
Run Code Online (Sandbox Code Playgroud)

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

Ama*_*dan 5

$.getJSON是异步的.这意味着,你告诉它取东西,然后它会提供一些时间.如果在控制台中执行此操作,则在请求结果之前,它有足够的时间来运行差事.如果你按照你的方式在代码中执行它,你要求它获取数据,然后立即请求数据; 但是你要问的是空气稀薄,因为JSON吸气剂仍然在差事上.你需要让它告诉你什么时候完成:

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