如何在Ajax 4.0中处理异步调用(使用jquery?)

时间:2010-01-27 07:29:37

标签: jquery html ajax asynchronous

在我的代码中,我做了类似的事情。

 $.get('/Home/Module/Submit',
                { moduleName: ModName,
                    moduleParameters: moduleParameters
                },

   function(result) {


       $("#" + target).html(result);

   });

当我在函数中放置警报(结果){..} 它完美地显示了html(在警报和'目标' - 在.aspx页面上) 但是,当我删除页面上的警报..'html'不会出现或随机出现(此方法被多次调用)

我认为'结果'是异步运行的,这就是为什么它不与相应的'div'绑定 但是在最后一次迭代中,它每次都会被绑定。

我们可以让进程停止直到数据绑定吗? 或者是否有任何可以使数据绑定的功能(如警报).. 没有打扰UI(与警报不同)?

1 个答案:

答案 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执行的东西,直到执行了某段代码。