获取JSON文件的AJAX调用返回null值

时间:2017-07-11 16:31:02

标签: javascript jquery json ajax

我有一个函数,现在通过AJAX调用检索JSON文件并在控制台上打印出它的内容。但是,我无法让它读取文件。我知道位置格式正确,但json变量将始终返回值null,表示文件不存在。

function loadSettings(){
    //loads setting list from mcc.json
    var options = (function() {
        var json = null;
        $.ajax({
            'async': false,
            'global': false,
            'url': "js/mcc.json",
            'dataType': "json",
            'success': function (data) {
                json = data;
            }
        });
        return json;
    })();
    console.log(options);
}

我的AJAX通话是否有问题?

4 个答案:

答案 0 :(得分:2)

仅当ajax调用完成时才会发生成功/完成回调。因此,您的函数实际上没有返回任何内容(“return json”)。

在AJAX中,您需要获取数据对象,然后调用接下来应该运行的内容,因为任何成功或完整的回调函数将在您执行的代码之后,当服务器的响应返回时发生。

基本上,在ajax调用完成之前,您将返回json变量。

答案 1 :(得分:0)

AJAX是由它的名称本身进行的异步调用,所以它是一个非阻塞代码,所以你的

return json将立即(您指定为null),在响应从服务器返回一段时间后,将执行success回调,该回调仍然可以访问该变量({ {1}})在外部封闭中声明。

而是尝试返回一个承诺,并在数据进入json回调时解决该承诺。并且在promise的使用结束时,使用带有回调的success来获取数据时使用数据进行解析。

修改

在编辑中,我正在编辑您的代码并添加到此答案,使用承诺并立即返回承诺以使用相同的模式工作

then

答案 2 :(得分:0)

由于您从一个立即调用的函数中分配了options返回的值,您应该记住,javascript不会停止执行或等待任何异步请求被解析您的IIFE将立即返回(在您的情况下,json设置为null)

如果您需要处理返回的数据,请在success回调

中进行处理

答案 3 :(得分:0)

返回JSON数据时,AJAX调用尚未完成。有人提到使用承诺,但替代方案如下所示。这在AJAX完成后调用doTheNextThing函数。在新功能中处理您的设置。

function loadSettings(){
    var options = (function() {
        $.ajax({
            'async': false,
            'global': false,
            'url': "js/mcc.json",
            'dataType': "json",
            'success': function (data) {                
                doTheNextThing(data);
            }
        });           
    })();
}
//------------------------------------------
function doTheNextThing(data)
{
    //Now process your load settings here
}