小编典典

jquery abort()ajax请求再发送另一个

ajax

基于:使用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>

阅读 301

收藏
2020-07-26

共1个答案

小编典典

创建所有请求的数组队列。然后,如果找到需要中止所有现有请求的位置,则可以遍历数组并在所有未决请求上调用中止。应该很简单。

尽管另一种方法是只保留一个内部标志,该标志指示当前是否正在处理一个请求,如果有请求,则跳过该请求。或者处理您认为合适的方式。

编辑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();

或者只是在函数外部定义一个变量,该变量是指示是否正在发出请求的标志。您甚至可以使其更加具体并存储搜索数据,并且仅跳过对相同数据有待处理请求的请求,并允许其他针对不同数据的请求。

希望这足以让您入门。

2020-07-26