我有以下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);
答案 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)
});
}
正如您所看到的,此代码简短易读