getJSON 对象的 responseJSON 未定义?
responseJSON of a getJSON object is undefined?
鉴于以下情况:
$(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.
});
var jqXHR = $.getJson('some url');
jqXHR.complete(function(response) {
console.log(response);
});
或
$.getJson('some url', function(response) {
console.log(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.
});
var jqXHR = $.getJson('some url');
jqXHR.complete(function(response) {
console.log(response);
});
或
$.getJson('some url', function(response) {
console.log(response);
});