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>

在使用jQuery和Bootstrap框架开发网页时,我们可能会遇到在模态框中多次触发同一事件导致多个Ajax请求被同时发送的情况。为了防止这种情况发生,我们可以在发送Ajax请求前对模态框进行一些控制,以阻止用户在等待Ajax响应时重复触发事件。 一个常见的做法是使用Bootstrap提供的数据属性来控制模态框的状态。在打开模态框前,可以通过设置模态框的`data`属性来标记已经打开,然后在Ajax请求结束后清除这个状态。这样,当用户尝试再次触发事件时,我们可以通过检查这个标记来决定是否需要执行后续操作。 以下是一个简单的示例代码: ```javascript // 假设这是一个触发模态框的按钮的点击事件处理函数 $('#myButton').on('click', function () { // 检查模态框是否已经打开 if ($('#myModal').data('is-opening')) { return; // 如果已经打开,则不执行后续操作 } // 标记模态框正在打开 $('#myModal').data('is-opening', true); // 显示模态框 $('#myModal').modal('show'); // 发送Ajax请求 $.ajax({ url: 'your-endpoint-url', method: 'POST', // ...其他ajax选项 success: function (response) { // 处理成功的响应 // ... // 清除标记 $('#myModal').data('is-opening', false); }, error: function (xhr) { // 处理错误情况 // ... // 清除标记 $('#myModal').data('is-opening', false); } }); }); ``` 在上面的示例中,我们使用了`data('is-opening')`来检查模态框是否正在打开。这是一个简单的标志位,你可以根据实际情况进行调整或扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值