在我的代码中,我做了类似的事情。
$.get('/Home/Module/Submit',
{ moduleName: ModName,
moduleParameters: moduleParameters
},
function(result) {
$("#" + target).html(result);
});
当我在函数中放置警报(结果){..} 它完美地显示了html(在警报和'目标' - 在.aspx页面上) 但是,当我删除页面上的警报..'html'不会出现或随机出现(此方法被多次调用)
我认为'结果'是异步运行的,这就是为什么它不与相应的'div'绑定 但是在最后一次迭代中,它每次都会被绑定。
我们可以让进程停止直到数据绑定吗? 或者是否有任何可以使数据绑定的功能(如警报).. 没有打扰UI(与警报不同)?
答案 0 :(得分:0)
您的回调函数使用在外部作用域中定义的target
,可能是全局的。你说你几次都在做这个调用,而且最后一次迭代每次都有效,所以我猜测target
实际上是被一些外部影响所改变的?在这种情况下,很可能在执行时target
的值不是您认为的值。您可以创建一个新的闭包,target
肯定不会改变:
$.get('/Home/Module/Submit', { data }, (function(t) {
return function(result) {
$("#" + t).html(result);
}
})(target));
我们在这里做的是创建一个新的匿名函数,返回你想要使用的回调函数。您可以将其视为工厂功能。在调用get
之前,只需立即调用此函数,因为必须对其进行求值以计算传递给get
的第三个参数。我们调用此函数,传递target
,因此target
的值将是AJAX调用时的值,而不是之前的AJAX响应时间。将为每次迭代创建一个新的闭包,其中各自的t
参数将对应于创建时target
的值。
你不想要提出一些能够阻止JavaScript执行的东西,直到执行了某段代码。