5

我编写了一个使用 jQuery 发出异步请求的函数。

var Site = {

    asyncRequest : function(url, containerId) {        
        $.ajax({
            url : url,
            onSuccess: function(data){
                $(containerId).html(data);
            }
        });
    }
}

当我使用记事本时,语法可能略有错误,但希望你能明白。

我调用函数:

Site.asyncRequest('someurl', container1);
Site.asyncRequest('someurl', container2);

两个请求都由服务器发送和处理。两个回复被发回,这是我所期望的。但是,我希望 container1 和 container2 包含来自这两个请求的响应。

问题是只显示最后一个响应,我不知道为什么。我不知道 jQuery ajax 如何跟踪请求/响应,所以也许这是一个问题。

假设我发出 5 或 10 个请求,jQuery ajax 是如何知道哪个响应针对哪个请求以及它在哪里跟踪它?

谢谢

4

2 回答 2

5

这似乎是一个 Javascript 范围问题。尝试以下操作:

var Site = {
    asyncRequest: function(url, containerId) {
        (function(theContainer) {
            $.ajax({
                url: url,
                onSuccess: function(data) {
                    $(theContainer).html(data);
                }
            });
        })(containerId);
    }
};

这为每个函数调用创建了一个单独的范围,因此“theContainer”指向的实际值对于每个 onSuccess 匿名函数都是不同的。

于 2012-03-20T22:58:10.547 回答
1

由于声明函数的方式,这里发生的情况是创建了一个闭包。请参阅此处的“更高级的示例”:http: //skilldrick.co.uk/2010/11/a-brief-introduction-to-closures/

基本上,在该匿名函数containerId的所有实例之间共享。onSuccess我没有对此进行测试,但我相信如果你在asyncRequest之外定义你的函数Site,这将起作用。

至于这个问题的更优雅的解决方案,也许其他人会回答得更好。

于 2012-03-20T22:57:50.977 回答