Javascript 无法从jQuery函数返回JSON对象
我无法从页面加载时运行的函数中正确返回JSON对象(或者更好的说法是“捕获”)。我希望捕获该对象,以便随后可以通过用户操作将其发布到另一个页面 我在Windows10上运行这个,Firefox最新版本Javascript 无法从jQuery函数返回JSON对象,javascript,jquery,ajax,Javascript,Jquery,Ajax,我无法从页面加载时运行的函数中正确返回JSON对象(或者更好的说法是“捕获”)。我希望捕获该对象,以便随后可以通过用户操作将其发布到另一个页面 我在Windows10上运行这个,Firefox最新版本 var configJson; $(document).ready(function () { // Wait till page is loaded configJson = getConfig(); console.log("Outside: " + JSON.stringif
var configJson;
$(document).ready(function () { // Wait till page is loaded
configJson = getConfig();
console.log("Outside: " + JSON.stringify(configJson)); // DEBUG
});
function getConfig() {
var jqxhr = $.getJSON("/config/", function () {
//console.log("Success."); // DEBUG
})
.done(function (data) {
console.log("Inside: " + JSON.stringify(data)); // DEBUG
return data;
})
.fail(function () {
console.log("Fail."); // DEBUG
return JSON.parse("{}");
})
}
在控制台中,“外部”是返回的内容,“内部”是在函数中看到的内容:
Inside: {"name":"fred"}
Outside: undefined
不能从异步函数返回数据,因此需要使用回调函数。像这样:
$(document).ready(function () {
getConfig(function(configJson) {
console.log("Outside: " + JSON.stringify(configJson));
// do something with configJson here.
});
});
function getConfig(callback) {
var jqxhr = $.getJSON("/config/")
.done(function (data) {
console.log("Inside: " + JSON.stringify(data));
callback(data);
})
.fail(function () {
console.log("Failed!");
callback({});
});
}
如果需要包含配置的全局变量,可以执行以下操作:
var globalConfig = {};
$(document).ready(function () {
getConfig(function(configJson) {
globalConfig = configJson;
});
});
// ...
是的,这是因为ajax调用$.getJSON是异步的。因此,console.log(“外部”)在$.getJSON调用结束之前执行。您可以在函数getConfig()中使用回调函数,并使用回调结果调用控制台日志。您可以在文档中查看差异对象,并查看一些示例。我甚至准备好了异步和完全间隔!谢谢你的帮助。