场景描述:

在我们平时的开发过程中,经常会遇到这样的情况。在搜索功能中进行模糊搜索或者联想关联。

这就要我们每次对输入框中的数据进行改动时,都要发送一次请求。当在短时间内多次操作改动时,问题就出现了。

每次操作的请求都会返回数据,有时,返回的数据需要时间长,有时返回的数据需要时间短。大家都知道,ajax请求默认的是异步请求,每次请求和请求后进行的操作,都是独立进行的。当同一个请求多次发生时,他在页面上最终执行的效果是,以最晚返回的数据进行相应的展示操作,而不是绝对以最后一次请求所返回的数据进行展示(注:最后一次请求不一定是最晚返回的。)。

我们想要的当然是最后一次请求的数据进行的展示操作了啊。那我们就要求,绝对最后一次执行的是最后一次请求后所要进行的操作。解决方法有两种:

一、使用定时器,限制请求次数。

保证在一定的时间间隔内,对输入框进行多次改动操作,发送的只有最后一次改动操作的请求。

这种方法有很大优点,首先在一定程度上,解决了上面所描述的问题。其次,他减少了请求次数,减少了服务器和浏览器的工作量。

但是它还是有缺点的。

1、那就是时间间隔的把控。你不知道每次请求究竟会用多长时间,你不清楚设置多少合适,长了牺牲了客户的体验,短了还是会遇到上面的问题。

2、你不知道你面对的究竟是一群什么样的客户。就算你满足1中的条件设置好,你的客户进行反人类操作,按照你设置的时间间隔进行字母输入,那你的工作还是白费了。

基于上面两点,我并不喜欢采用这种方法解决这个问题,所以代码也不上了,大家知道思路,逻辑自己梳理吧。(绝对不是小编自己没有整理,才不发代码的。)

二、基于ajax自身的终止函数

将没有进行完而重复进行的请求,终止掉,而且是只终止前一个ajax请求,新的请求在下一个请求发送前,不会终止。

在这个方法中,一定要注意,每一个ajax都有一个自己的函数名,不同的函数名定义的ajax就是不同的ajax请求了。要只能终止自己的ajax请求。

这个方法也是有优缺点的。

优点:无论客户多么反人类,无论数据请求多么耗时,他都能保证返回和操作的是最有一次请求的数据。

缺点:每次输入框中的数据改动都会发送请求,即他不能减少请求次数。而且终止的话,也只是不再执行ajax前端部分接下来的操作,后台工作量还在。

好了两种方法大概这样,如果有人想两个方法结合,可以自己整理下啊。接下来,我就只把第二种方法的代码上传上去,仅供参考。不足之处还望指正。

var AllAjax={commonAjax =function (interface,params,callback,flag) {var data={};$.each(params,function(i,v){data[i]=v;});//AllAjax.closeError这个对象元素用于标识,以便于在ajax的报错函数中输出想要的值。if(AllAjax[interface]){AllAjax[interface].abort();AllAjax.closeError=false;}AllAjax[interface]=$.ajax({type: "post",url: interface,data: params,dataType: "json",success: function(data){if(data.code == '200'){callback(data);}else{if(AllAjax.closeError){AllAjax.closeError=true;}else{AllAjax.closeError=true;}alert('数据有误!'+data.code);}},error:function (err) {if(AllAjax.closeError||AllAjax.closeError===undefined){alert('Network is error');}else{AllAjax.closeError=true;}}});};
}
//这个方法中使用对象的形式进行封装。使用方法 AllAjax.commonAjax (url,params,callback,flag);
//四个参数意义,
//url:请求的url,另外还用来作为这个url请求的ajax函数名。
//params:接口调用时传入的参数。
//callback:请求成功后调用的函数。
//flag:传入的另外要使用的参数。会作为callback的参数传入callback中。如果需要,可以在定义回调函数时接受两个参数。此参数可以不传。
复制代码

本次给大家推荐一个最后给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。 对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。 最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

转载于:https://juejin.im/post/5bb218d66fb9a05cee1df679

基于jquery,ajax请求及自我终止的函数封装相关推荐

  1. jQuery ajax请求两次问题,jquery ajax请求了两次问题

    页面有一个请求form: 订单编号 用户帐户 发货状态 请选择 未发送 已发送 查询 JavaScript请求部分: function showdatalist() { var username = ...

  2. 统一处理jquery ajax请求过程中的异常错误信息的机制

    统一处理jquery ajax请求过程中的异常错误信息的机制 参考文章: (1)统一处理jquery ajax请求过程中的异常错误信息的机制 (2)https://www.cnblogs.com/wi ...

  3. ajax datatype为html,Jquery ajax请求中datatype的含义

    一切从一个普通的前端ajax请求jspringMVC后端的例子开始, 前端jquery ajax 请求: $.ajax({ url: getAbsoluteUrl('score/findScore') ...

  4. ajax反序列化出错,将数据从jquery ajax请求传递给wcf服务失败了反序列化?

    我使用下面的代码来调用wcf服务.如果我调用不带参数的(测试)方法,但返回一个字符串,它工作正常.如果我一个参数添加到我的方法,我得到一个奇怪的错误:将数据从jquery ajax请求传递给wcf服务 ...

  5. 使用ETag识别ajax,如何使用jQuery AJAX请求访问ETag头?

    我正在使用jQuery ajax调用来请求来自发送HTTP响应头中的ETag的服务器的数据.我需要访问标题,但是当请求成功并调用jqXHR.getAllResponseHeaders()时,我只能看到 ...

  6. 循环发ajax请求,在循环中发送jquery ajax请求

    我在我的Web应用程序的Map中实现了"空间选择",它选择Streets的数量.选择后,我会为使用"选择处理程序"选择的所有街道获取唯一的街道标识.在循环中发送 ...

  7. jquery ajax传递data,基于jquery ajax中的data传递参数与后台工作的流程

    基于jquery ajax中的data传递参数与后台工作的流程 2014-11-12    分类: php学习,前端资源,学习jquery基础 首先列出实例代码 js代码: $('button').c ...

  8. ppst——技术视频 jquery ajax 请求 同步异步的执行的设置

    ppst 技术视频--技术视频 jquery ajax 请求 同步异步的执行的设置:请访问ppst 技术视频分享平台 , www.ppst.cc,上面有最新的技术视频,推荐大家把博客录制成视频吧,可以 ...

  9. ajax 怎么input赋值,jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签...

    jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签 发布于 2016-11-25 16:26:40 | 111 次阅读 | 评论: 0 | 来源: ...

最新文章

  1. Codeforces Round #165 (Div. 2) A - Fancy Fence
  2. TalkingData CTO肖文峰:研发工程师,你为啥升不上去?
  3. 全球云数据中心发展预测白皮书2016~2021
  4. 2021年中国家装行业数字化转型研究报告
  5. 飞鸽传书2012 的网络通信代码
  6. 项目管理之道之沟通管理-外部接口只能有一个
  7. CSS缩小窗口时,背景图出现右侧空白
  8. Mac Eclipse 主题选择
  9. coreos_CoreOS简介
  10. 棒棒的毛笔字PS教程
  11. UReport2报表序号展示
  12. HDU 1728 优化的BFS
  13. 计算机桌面底边出现库如何去掉,桌面图标有蓝底怎么去掉完美全解决方案
  14. Justoj 2388最短区间 贪心
  15. 十二个常见的Web安全漏洞总结及防范措施
  16. CodeForces - 19E Fairy【二分图】【DFS】
  17. 关于元素定位使用class_name定位报错的部分问题Unable to locate element: {“method“:“css selector“
  18. 老员工的工资为什么会倒挂?
  19. visionPro中混淆阈值是什么?
  20. 游戏美术设计外包哪家比较好

热门文章

  1. 备份和迁移Kubernetes应用程序利器-velero
  2. mysql 分组查出来横向展示_实战MySql查询
  3. 最近一段时间遇到的费了时间的问题
  4. vuex mysql_Vue插件---Vuex(仓库,数据库)
  5. RabbitMQ七种队列模式介绍与应用场景(通俗易懂)
  6. 实战系列-使用Mybatis-Plus生成器生成代码
  7. JVM优化系列-对象内存分配和回收的细节
  8. SpringBoot 自动配置原理
  9. linux命令之awk终极系列
  10. AuthenticationManager验证原理分析