Javascript $.getJSON终于被激发了
在我的点击事件中,我试图打开一个引导模式。Modal有一些值,我正试图使用getJSON从ajax调用中获取这些值。问题是,当jQuery函数结束时,getJSON最后被激发 这是我的密码:Javascript $.getJSON终于被激发了,javascript,jquery,ajax,json,twitter-bootstrap,Javascript,Jquery,Ajax,Json,Twitter Bootstrap,在我的点击事件中,我试图打开一个引导模式。Modal有一些值,我正试图使用getJSON从ajax调用中获取这些值。问题是,当jQuery函数结束时,getJSON最后被激发 这是我的密码: $('.poplinks').popover().parent().on('click', '.insert-submission', function () { var baKey = 8701; var obj; $.getJSO
$('.poplinks').popover().parent().on('click', '.insert-submission', function () {
var baKey = 8701;
var obj;
$.getJSON('/urltogetobjectwithvalue/', {id: baKey}, function (result) {
debugger; //it comes here at last after modal('show') executes
obj = result;
});
debugger; //first it come here
$("#span_unk_sub_baid").html(baKey);
if (obj !== undefined)
$("#span_unk_sub_baid").append(' Eff Date: ' + obj.EffectiveDate);
$('#dialog_ins_purc').modal('show'); //now it will go to $.getJSON
});
我想展示我从JSON调用中得到的一些值。加载模态后,它将获取值。如何确保json调用按照我想要的顺序进行。请帮助。不要使用速记
$.ajax({
type:'GET',
async:false,
url:"your url",
dataType:'JSON',
data:{id,baKey}
success:function(result)
{
debugger;obj = result;
}
});
Async默认设置为true。因此,js在这次ajax调用后执行代码,不会等待服务器返回响应。如果设置为false,js将等待服务器返回数据并继续执行。JavaScript是一种事件驱动语言,这意味着它可以异步工作 Ajax—是以异步方式访问服务器的方式 像getJSON这样的函数使用AJAX以异步方式工作——这意味着,在从服务器获得结果之前,它不会阻塞整个脚本——在这种情况下,它会启动一个操作,从服务器请求一个资源,并接收一个函数,每当发生某个事件时(在这种情况下,请求到达服务器时)调用该函数,通常称为回调它的结束-即,您从服务器获得响应 如果它按照您想象的方式工作,则无需像您那样传递函数,您可以编写:
obj = $.getJSON('/urltogetobjectwithvalue/', {id: baKey}); //WRONG CODE - DON'T USE IT
关于Javascript中使用setTimeout的异步编程,有一个很好的解释,setTimeout在Javascript中也可以异步工作
为了使事情按我想你想要的顺序进行,你应该做如下事情:
$('.poplinks').popover().parent().on('click', '.insert-submission', function () {
var baKey = 8701;
var obj;
function afterResponse(){
$("#span_unk_sub_baid").html(baKey);
if (obj !== undefined)
$("#span_unk_sub_baid").append(' Eff Date: ' + obj.EffectiveDate);
$('#dialog_ins_purc').modal('show');
}
$.getJSON('/urltogetobjectwithvalue/', {id: baKey}, function (result) {
obj = result;
afterResponse();
});
});
不,它会在您调用它时立即启动,但是由于AJAX异步Javascript和XML是异步的,您猜到了,它会在等待响应时继续执行代码,因此它会在您的服务器响应时首先调用回调,这是在您的浏览器完成匿名函数的其余部分之后。将获得结果后要执行的代码放入回调函数result anonymous函数中,这样就可以了。可能重复的代码请注意,这样做的原因是使用async:false?-1,使用同步请求将锁定UI,有更好的方法可以解决这个问题。你建议我应该使用什么?如果你想在从服务器获得结果后发生什么事情,它应该放在回调函数内部或从回调函数调用的另一个函数中。我已经用examplefunction afterResponse编辑了答案,它应该在click事件内部,或者我可以将它放在外部?baKey变量只存在于函数内部,因此它必须在click处理程序内部-如果要取出它,还需要取出baKey。同样适用于obj变量,但与tobaKey相反,您可以通过向afterResponse回调发送结果参数来轻松忽略obj。我是否可以将baKey和obj作为参数传递给afterResponse回调,如afterResponseobj,baKey?