Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 如何使用jqueryajax数据创建变量_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何使用jqueryajax数据创建变量

Javascript 如何使用jqueryajax数据创建变量,javascript,jquery,json,Javascript,Jquery,Json,我有以下javascript代码: function initSite(){ var site; $.getJSON(www+'init/initSite', function(data) { site = data; }); } $(document).ready(function(){ var site = initSite(); console.log(site); } 返回未定义的。。。如何将接收到的json对象存储在site变量中,以便以后使用

我有以下javascript代码:

function initSite(){
    var site;
    $.getJSON(www+'init/initSite', function(data) { site = data; });
}
$(document).ready(function(){
    var site = initSite();
        console.log(site);
}
返回未定义的。。。如何将接收到的json对象存储在site变量中,以便以后使用

编辑: 这似乎有效,但我不确定使用这个解决方案是否正确

var site = null;
$.ajax({
  url: www+"init/initSite",
  async: false,
  dataType: 'json',
  success: function (data) {
    site = data;
  }
});
console.log(site);

问题只是一个遗漏的概念:

getJSON
是一个异步调用,
site=data只会在DOM准备就绪后发生

为了使一切按其应有的方式运行,您的初始化需要从异步调用结果开始,而不是从之前开始,例如:

// no need to wait for DOM ready to call `initSite`
initSite();

function initSite() {
    $.getJSON(www+'init/initSite', function(data) {  
        initialization(data);
    });
}
function initialization(site) {
    // initialize all the things that need to be done
    console.log(site);
}

$(document).ready(function(){
    // do other stuff, for example show a loading message/image
}

问题只是一个遗漏的概念:

getJSON
是一个异步调用,
site=data只会在DOM准备就绪后发生

为了使一切按其应有的方式运行,您的初始化需要从异步调用结果开始,而不是从之前开始,例如:

// no need to wait for DOM ready to call `initSite`
initSite();

function initSite() {
    $.getJSON(www+'init/initSite', function(data) {  
        initialization(data);
    });
}
function initialization(site) {
    // initialize all the things that need to be done
    console.log(site);
}

$(document).ready(function(){
    // do other stuff, for example show a loading message/image
}
当然,由于函数不返回任何内容,而且ajax调用也是异步的,所以您必须等待服务器响应,所以没有定义。由于
$.ajax
(和快捷方式)返回一个承诺,您可以使用

function initSite(){
    return $.getJSON(www+'init/initSite');
}
$(document).ready(function(){
    $.when(initSite()).done(function(data) {
        /* continue here the code execution, e.g. call another function */

        doAllTheRemainingWorkWith(data)

    });
}
正如您所看到的,这段代码简短易读

当然您没有定义,因为您的函数不返回任何内容,而且ajax调用也是异步的,所以您必须等待服务器响应。由于
$.ajax
(和快捷方式)返回一个承诺,您可以使用

function initSite(){
    return $.getJSON(www+'init/initSite');
}
$(document).ready(function(){
    $.when(initSite()).done(function(data) {
        /* continue here the code execution, e.g. call another function */

        doAllTheRemainingWorkWith(data)

    });
}

正如您所看到的,这段代码简短易读

欢迎来到奇妙的异步世界!你不能这么做。那我该如何使用从javascript中的ajax查询中获得的isloggedin变量来限制用户未登录时的操作呢?使用回调,如
getJSON
。可能重复/相关:不需要检查,这只是一个简单的未登录概念。您可以从结果调用初始化所有内容,无需仅在DOM就绪时进行初始化。。。看看答案。欢迎来到异步的奇妙世界!你不能这么做。那我该如何使用从javascript中的ajax查询中获得的isloggedin变量来限制用户未登录时的操作呢?使用回调,如
getJSON
。可能重复/相关:不需要检查,这只是一个简单的未登录概念。您可以从结果调用初始化所有内容,无需仅在DOM就绪时进行初始化。。。查看答案。我当前的javascript代码超过2000行代码。。。我必须把所有的代码放在调用函数的地方吗?我当前的javascript代码超过2000行。。。我必须把所有的代码放在你调用函数的地方吗?但是我的代码太多了,不能放在函数里。。。这就是它应该如何工作的吗?在
done()
中,只需调用另一个传递返回数据的函数,但我的代码太多,无法将其放入函数中。。。它应该是这样工作的吗?在
done()
中,只需调用另一个传递返回数据的函数即可