ajax多次请求,只执行最后一次的方法

Posted 苏小麦麦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax多次请求,只执行最后一次的方法相关的知识,希望对你有一定的参考价值。

ajax多次请求,只执行最后一次的方法

有时候点击按钮进行异步请求数据的时候可能网络差,用户会点击很多次,或者页面有很多相同的按钮,参数不同,但是调用的ajax相同,只想得到最后一次结果

我的思路是用闭包记录执行次数,并同时记录发起ajax的次数,等数据返回的时候比较两次次数的结果,渲染最后一次数据

多说无益,上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="renderer" content="webkit">

    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <title>Title</title>
</head>
<body>
<button id="ajaxbtn">获取数据</button>
点击次数<span id="num"></span>
<div id="show">

</div>

<script>
    //定义点击次数和方法执行次数
    var a = 1;
    var flag = 1;
    $(#ajaxbtn).click(function () {
        a = a + 1
        $(#num).html(a)
        console.log(a);
        btnAjax(https://api.douban.com/v2/movie/in_theaters, cb);
    })
//封装ajax事件
    function btnAjax(url, cb) {

        $.ajax({
            type: get,
            url: url,
            dataType: jsonp,
            success: function (data) {
                var func = callbackFunc(data, cb);
                func()
            }
        })
    }
    //返回函数
    function cb(data) {
        console.log(a);
        console.log(data);
        var str = ‘‘;
        for (var i = 0; i < data.subjects.length; i++) {
            str += <img src=" + data.subjects[i].images.small + ">;
        }
        $(#show).html(str)
    }
    //判断次数,获取返回函数
    function callbackFunc(data, cb) {
        flag++;
        if (a == flag) {
            return function () {
                cb(data);
            }
        } else {
            return function () {
            }
        }
    }
</script>
</body>
</html>

 

以上是关于ajax多次请求,只执行最后一次的方法的主要内容,如果未能解决你的问题,请参考以下文章

解决bootstrap-table多次请求只触发一次的问题

防抖节流函数

如何在一个循环执行ajax方法里面嵌套的ajax方法

Ext的ajax同步交互方式提交时相同url只执行一次的问题解决

Ext的ajax同步交互方式提交时相同url只执行一次的问题解决

JS的监听多次触发执行最后一次方法