繁体   English   中英

如何使用jQuery Ajax数据进行变量

[英]How to use jQuery ajax data to variable

我有以下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);
function initSite(onSuccess){
    $.getJSON(www+'init/initSite', onSuccess);
}
$(document).ready(function(){
   initSite(function(data){
       var site = data;
       // initialize your code.
   });
}

问题只是一个未命中的概念:

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 (和快捷方式)返回一个诺言,您可以使用deferred完成此任务

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)

    });
}

如您所见,此代码简短易读

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM