Javascript 如何使用jqueryajax数据创建变量
我有以下javascript代码: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变量中,以便以后使用
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()
中,只需调用另一个传递返回数据的函数即可