如何使用jQuery ajax数据来变量

时间:2012-02-08 17:40:45

标签: 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);
}

返回 undefined ...如何存储我在网站变量中收到的json对象,以便我以后可以使用它?

修改 这似乎有效,但我不确定它是否正确使用此解决方案

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

3 个答案:

答案 0 :(得分:1)

function initSite(onSuccess){
    $.getJSON(www+'init/initSite', onSuccess);
}
$(document).ready(function(){
   initSite(function(data){
       var site = data;
       // initialize your code.
   });
}

答案 1 :(得分:1)

问题只是一个错过概念:

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
}

答案 2 :(得分:1)

当然你有 undefined ,因为你的函数没有返回任何东西而且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)

    });
}

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