基于:使用jQuery中止Ajax请求 …在stock_search()中-在发出ajax请求之前,如何在发出新请求之前检查当前的任何请求并中止()?还是…有更好的方法吗?
<script type="text/javascript"> $(function() { $('form#internal_catalog').change(function() { inventory_search(); }); }); function inventory_search() { var search_data = $('form#internal_catalog').serialize(); var a = $.ajax({ type: 'post', url: '/test.php', data: search_data, success: function(data) { $('#catalog').html(data); } }); } </script>
创建所有请求的数组队列。然后,如果找到需要中止所有现有请求的位置,则可以遍历数组并在所有未决请求上调用中止。应该很简单。
尽管另一种方法是只保留一个内部标志,该标志指示当前是否正在处理一个请求,如果有请求,则跳过该请求。或者处理您认为合适的方式。
编辑2:所以我可以做的是有一个数组,您将所有ajax调用附加到该数组。从本质上讲,这只是发出一个XmlHttpRequest,这就是ajax调用返回的结果。所以
requests.push( $.ajax({ type: 'post', url: '/test.php', data: search_data, success: function(data) { $('#catalog').html(data); } }));
这会将所有请求添加到一个可以在某处定义的请求数组中。然后,当您想杀死所有挂起的请求时,可以遍历数组并调用abort,这将杀死该请求。
for(var i = 0; i < requests.length; i++) requests[i].abort();
或者只是在函数外部定义一个变量,该变量是指示是否正在发出请求的标志。您甚至可以使其更加具体并存储搜索数据,并且仅跳过对相同数据有待处理请求的请求,并允许其他针对不同数据的请求。
希望这足以让您入门。