场景描述:

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

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

每次操作的请求都会返回数据,有时,返回的数据需要时间长,有时返回的数据需要时间短。大家都知道,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中。如果需要,可以在定义回调函数时接受两个参数。此参数可以不传。



  

基于jquery,ajax请求及自我终止的函数封装。的更多相关文章

  1. jquery ajax请求方式与提示用户正在处理请稍等,等待数据返回时loading的显示

    1.jquery ajax请求方式与提示用户正在处理请稍等 为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实 ...

  2. jQuery ajax 请求php遍历json数组到table中

    html代码(test.html),js在html底部 <!DOCTYPE html> <html lang="en"> <head> < ...

  3. 基于Jquery+Ajax+Json+存储过程 高效分页

    在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...

  4. jquery Ajax请求示例,jquery Ajax基本请求方法示例

    jquery Ajax请求示例,jquery Ajax基本请求方法示例 ================================ ©Copyright 蕃薯耀 2018年5月7日 https: ...

  5. jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法

    1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是“a ...

  6. 原生js,jquery ajax请求以及jsonp的调用

    ajax    是用来处理前后端交互的技术,可以改善用户体验,其本质是    XMLHttpRequest,异步访问服务器并发送请求数据,服务器返回响应的数据,以页面无刷新的效果改变页面中的局部内容  ...

  7. jQuery ajax请求错误返回status 0和错误error的问题

    上周发现一个jQuery ajax请求错误返回status 0和错误error的问题,responseText是"error",状态码是0而不是200: $.ajax({ type ...

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

    当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编 ...

  9. jquery Ajax请求中显示Loading...

    jquery Ajax请求中显示Loading... $('#btnTest').click(function(){      $.ajax({           url ---- ,根据你需要设置 ...

随机推荐

  1. pt-mysql-summary

    pt-mysql-summary主要用来输出MySQL的基本信息,可以作为数据库巡检以及刚开始熟悉数据库环境时候进行使用: [root@mxqmongodb2 bin]# ./pt-mysql-sum ...

  2. js数组 标签: javascript 2016-08-03 14:15 131人阅读 评论(0) 收藏

    数组排序 reverse()方法 reverse()方法会反转数组的顺序. sort()方法 默认情况下sort()方法按升序排列数组项.为实现排序sort()方法调用每项的toString(),然后 ...

  3. 小程序——微信小程序初学踩过的坑

    微信小程序初学踩过的坑 一.前言     最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...

  4. WBS 工作分解结构

    WBS:工作分解结构(Work Breakdown Structure) 创建WBS:创建WBS是把项目 交付成果和项目工作分解成较小的,更易于管理的组成部分的过程. 主要用途WBS是一个描述思路的规 ...

  5. 【pbrt】在c++程序中使用pbrt进行渲染

    近段时间做一个关于水面的动画.由于我用c++实现水面动画的,然而使用c++我自己的渲染系统渲染结果被同学说是可视化不叫渲染,所以我决定修改一下…… 恰好进来在学习pbrt,所以索性就蛋疼了考虑直接用p ...

  6. xml-apis-ext.jar

    xml-apis-ext.jar,hightcharts导出图片是解决乱码需要用到的一个包

  7. python 获取某个月的全部日期

    import calendar print range(calendar.monthrange(year, month)[1]+1)[1:]

  8. ZooKeeper介绍与环境搭建

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  9. MySQL理解索引、添加索引的原则

    索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...

  10. luogu P2016 战略游戏

    嘟嘟嘟 树形dp水题啦. 刚开始以为和[SDOI2006]保安站岗这道题一样,然后交上去WA了. 仔细想想还是有区别的,一个是能看到相邻点,一个是能看到相邻边.对于第一个,可以(u, v)两个点都不放 ...