Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从jQuery函数返回JSON对象_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 无法从jQuery函数返回JSON对象

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

我无法从页面加载时运行的函数中正确返回JSON对象(或者更好的说法是“捕获”)。我希望捕获该对象,以便随后可以通过用户操作将其发布到另一个页面

我在Windows10上运行这个,Firefox最新版本

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()中使用回调函数,并使用回调结果调用控制台日志。您可以在文档中查看差异对象,并查看一些示例。我甚至准备好了异步和完全间隔!谢谢你的帮助。