0

我正在开发一个项目,该项目允许用户在屏幕(左侧)上选择标准,Pole Country City并且有一个表格(我们正在使用的一些小部件)根据所选标准显示数据。

让我画一张图给我的问题一些背景

  • 欧洲
  • 美洲
  • 亚洲

国家

  • 美国
  • 中国
  • 英国

城市

  • 纽约市

  • 旧金山

  • 北京

这些只是我想到的一些例子——它更广泛。

另一个注意事项,您无法选择Country而不选择 aPole并且您无法选择City而不选择Country(进一步过滤它)。

每当用户单击其选择旁边的复选框时,都会使用提供数据的 url 执行 AJAX $.get 调用。我相信这个 URL 实际上是在访问我们的 Controller 类(但这个实现并不重要)。

选择数据时,此 Web 应用程序不会太快,聚合数据需要几秒钟。现在假设我已经选择 AmericasUnited States(每个都进行 ajax 调用,过滤我的数据)。

如果我选择San Francisco然后决定改为选择New York City,它只会给我数据San Francisco而不是两者,复选框都会被选中。

现在这对我来说很有意义,因为 $.get 调用是异步的。第一个电话是赢得比赛条件。

尽管如此,这已被报告为一个错误,我需要一个关于如何解决它的解决方案。我对Javascript不是很精通,我想知道是否有人有任何想法。

我在玩延迟对象,如果我能找到一种方法让它与这些对象一起工作,但我做不到。

在进行此 ajax 调用之前终止任何 ajax 调用会很好吗?这样,旧金山的通话将被终止,但与两个城市的通话都会接通。

有什么想法吗?

谢谢!

4

2 回答 2

1

您可以将您的 ajax 分配给主要返回XMLHttpRequest请求的变量。

然后您可以中止该特定请求。你可以试试这些行

var requestPool = null;

var request = $.ajax({
     ...
     ...
     beforeSend: function() {
         // Check if requestPool is not null
         // abort the previous request
         if(requestPool) {
             requestPool.abort();
         }
         // add the current request to the pool
         requestPool = request; 
     },
     success: function() {
         // your success callback
     },
     complete: function() {
        // no more requests
        requestPool = null;
    }
});
于 2013-07-19T20:16:02.543 回答
0

如果您正在跟踪 $.get 调用的句柄,则可以中止它们。

可能将所有相关的 ajax 调用存储在一个数组中,然后循环并中止它们。单击复选框时。

于 2013-07-19T20:17:32.887 回答