我有多个过滤数据的复选框,如何在此中取消AJAX调用?

时间:2013-07-19 20:04:39

标签: javascript jquery ajax asynchronous

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

让我画一幅画给我的问题一些背景

群组

  • 美洲

国家

  • 美国
  • 中国
  • 英国

城市

  • 纽约市

  • 旧金山

  • 北京

这些只是我想到的一些例子 - 它更具扩展性。

另一个注意事项,如果不选择Country,则无法选择Pole,如果不选择City,则无法选择Country(以便将其过滤掉)。< / p>

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

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

如果我选择San Francisco,然后决定选择New York City,则只会向我提供San Francisco的数据而不是两者的数据,同时选中复选框。< / p>

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

然而,这被报道为一个错误,我需要一个解决方案来解决它。我对Javascript不是很精通,我想知道是否有人有任何想法。

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

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

有人想过吗?

Thansk!

2 个答案:

答案 0 :(得分: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;
    }
});

答案 1 :(得分:0)

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

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