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>
时间: 2024-12-20 23:06:05

ajax多次请求,只执行最后一次的方法的相关文章

利用闭包实现多次ajax请求只执行最后一次

点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能是最后一次也可能是第二次.那么我们怎么解决这个问题呢,简单粗暴的方法就是在发送请求的时候将按钮disabled在请求完成成功之后解除disabled,那么一旦请求失败请求将一直处于pending状态, 因此考虑的情况就多了success,error,complete等事件,而且不利于用户体验.aja

js闭包for循环总是只执行最后一个值得解决方法

<style> li{ list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;cursor: pointer; } </style> html代码: <ul id="uls">    <li style="background:#aaa">0</li>    <li style="backgr

详解Ajax请求(四)——多个异步请求的执行顺序

首先提出一个问题:点击页面上一个按钮发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 答案是:不会,这两个异步请求会同时发送,至于执行的快与慢,要看响应的数据量的大小及后台逻辑的复杂程度. 从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死.等待的状态,从一个异步请求发送到获取响应结果的期间,浏览器还可以进行其它的操作.这就意味着多个异步请求的执行时并行的. 下面我们还是从一个例子来看一下这个问题. 要求:ajax1从后台请求下拉列表的数据,aj

Ajax后台只执行一次的解决方案

1 $.ajax({ 2 url: 'Ajax/OrderBy.aspx', 3 data: {AppIds: sortedAppids}, 4 dataType: 'xml', 5 type: 'POST', 6 success: function(xml) 7 { 8 alert("排序成功!"); 9 10 } 11 }); ajax在同步交互时,第一次提交正常,再第二次提交如果和上次提交的url地址相同时将不进行提交,会用上次的返回值.这样处理也许是ext别有良苦用心,但是,如

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了: header('Access-Control-Allow-Origin:*'); header("Access-Control-Allow-Headers: x-requested-with,content-type"); header('Access-Control-Allow-Methods: OPTION

JavaScript之Ajax-7 Ajax跨域请求(Ajax跨域概述、Ajax跨域实现)

一.Ajax跨域概述 同源策略 - 同源策略(Same origin policy)是一种约定,它是浏览器的核心也最最基本的核心.如果少了同源策略,则浏览器的正常功能可能都会收到影响.可以说Web是构建在同源策略基础上的,浏览器只是针对同源策略的一种实现 - 它是由 Netscape 提出的一个著名的安全策略 - 现在所有支持 JavaScript 的浏览器都会使用这个策略 - 所谓同源策略是指,域名.协议.端口相同 域名概述 - 域名(Domain Name) 是由一串用点分隔的名字组成的In

ASP.NET MVC 实现AJAX跨域请求的两种方法

通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据的加载,例如Google. 在ASP.NET MVC 框架里实现跨域的AJAX请求有几种方式可以实现,以下就介绍常用的两种方法. 1.     发送JSONP请求 客户端: JQuery对发送JSONP请求有很好的支持,客户端通过. ajax() 函数发送请求,其中需要制定 dataType 为“jsonp”  jsonpCallback 为指定的回调函

使用jsonp实现ajax跨域请求

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP.用 JSONP 抓到的资料并不是 JSON,