`

jQuery AJAX 扩展 ----自动放弃及 队列实现

阅读更多

自动放弃:

在发起AJAX请求时,如上一请求未完成则自动放弃.

修改参数  isAbort = false 可关闭该项



 AJAX请求队列:

依次执行一组 AJAX请求,前一个请求成功后,执行下一个



 

/**
 * ajax通信类
 * 依赖 jQuery 1.6+
 * 扩展jQuery的ajax 对象,用以实现 :
 * 1.继承上次请求的参数,
 * 2.如果上次请求未完成,自动放弃.
 * 3.ajax 队列讲求
 *
 * by oTwo alxw4616@msn.com
 * v 1.0 2013年7月31日
 *
 * 说明:
 * var db = new oTwo.DB(option) option:ajax常规设置 详见注释
 * db.xhr jqXHR 浏览器的XMLHttpRequest对象的一个超集
 * db.queueList array 请求队列(如果保存的话)
 * db.defaultAjaxOption Object ajax默认设置
 *
 * .get(option,[isExtend],[isAbort]) 用以获取 GET 请求.
 * .queue(optionArr,[flag]) ajax队列请求
 * .setDefault(option) 设置默认ajax 请求参数
 * .send(option) 继承默认设置,发送请求.
 */
var oTwo = oTwo || {};
oTwo.DB = function(option) {
	this.xhr = {};
	this.queueList = [];
	this.defaultAjaxOption = {
		url: "",
		type: "GET",
		data: "",
		dataType: "json",

		// 超时(毫秒) 当超时后,将执行.fail(), .done() 不会执行.
		timeout: "",

		//async:false 同步请求
		async: true,

		// cache:false 不缓存此页面 , ture 缓存此页面
		cache: false,

		//强制HTTP头 解决中文乱码
		contentType: 'application/x-www-form-urlencoded; charset=utf-8'
	}
        option = $.extend(true,this.defaultAjaxOption, option);
	this.setDefault(option);
	this.ajaxOption =$.extend(true,{},this.defaultAjaxOption);
}
oTwo.DB.prototype = {
	/**
	 * 用以获取 GET 请求.可通过 option 修改相关设置
	 * .get() 重复上次讲求
	 *
	 * .get(option,[isExtend],[isAbort]) 新的请求
	 * @param  Object option ajax设置参数
	 * ----请参考 http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
	 * @param  boolean isExtend 继承上次请求的参数
	 * ---- 默认 true,如果为false,则关闭该功能.
	 * @param  boolean isAbort  在发起AJAX请求时,如上一请求未完成则自动放弃.
	 * ---- 默认 true,如果为false,则关闭该功能.
	 *
	 * @return jqXHR $.ajax() 的返回对象,浏览器的XMLHttpRequest对象的一个超集.
	 * ----其常用方法
	 * ----jqXHR.done(function(data, textStatus, jqXHR) {}); 请求成功
	 * ----jqXHR.fail(function(jqXHR, textStatus, errorThrown) {}); 请求失败
	 * ----jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });请求完成
	 * ---请参考 http://api.jquery.com/jQuery.ajax/#jqXHR
	 */
	get: function(option, isExtend, isAbort) {
		if (typeof option === "string") {
			option = {
				"url": option
			}
		};

		//放弃上一个未完成的请求
		if (this.xhr && this.xhr.done && isAbort !== false) {
			this.xhr.abort();
		};

		// ajaxOption 回复到默认设置
		if (isExtend === false) {
			this.setDefault();
		};
		this.ajaxOption = $.extend(true,this.ajaxOption, option);
		this.xhr = this.send(this.ajaxOption);
		return this.xhr;
	},

	/**
	 * 内部方法请无视它
	 * 继承默认设置,发送请求.
	 * @param  Object option ajax设置参数
	 * @return jqXHR
	 */
	send: function(option) {
		option = $.extend(true, {},this.defaultAjaxOption, option);
		var xhr = $.ajax(option);
		return xhr;
	},

	/**
	 * .setDefault(option)
	 * 设置默认ajax 请求参数
	 * @param  Object option ajax设置参数
	 * @return oTwo.DB
	 *
	 * .setDefault()
	 * 恢复到默认设置
	 */
	setDefault: function(option) {
		if (!option) {
			this.ajaxOption = $.extend({}, this.defaultAjaxOption);
			return this;
		};

		this.defaultAjaxOption = $.extend(true,{}, option);
		return this;
	},

	/**
	 * ajax队列请求
	 * .queue()
	 * 获取当前队列
	 *
	 * .queue(optionArr,[flag])
	 * @param array option 请求数组
	 * ---- $.extend(ajaxoption, {callback:function(data){return true}});
	 * ---- ajaxoption: ajax设置参数将单独继承
	 * ---- callback:请求成功后的回调函数.如callback返回false后续请求将被放弃.
	 * ---- 如果请求不成功后续请求也将被放弃.
	 *
	 * @param boolean isSaveQueue 是否保存请求队列
	 * ---- 默认 true(保存)
	 */
	queue: function(queueList, isSaveQueue) {
		if (!queueList) {
			return;
		};
		if (isSaveQueue === false) {
			this.queueList = queueList;
		};
		if (queueList.length === 0) {
			return;
		};

		var ss = queueList.shift(),
			self = this;
		this.send(ss.ajaxoption).done(function(d) {
			var isGoOn = ss.callback(d);
			if (isGoOn !== false) {
				self.queue(queueList, false);
			};
		});
	}
}

 

  • 大小: 23.8 KB
  • 大小: 25.8 KB
0
2
分享到:
评论

相关推荐

    jQuery权威指南-源代码

    其次详细讲解了jQuery的各种选择器、jQuery操作DOM的方法、jQuery中的事件与应用、jQuery中的动画和特效、Ajax在jQuery中的应用,以及各种常用的jQuery插件的使用方法和技巧,所有这些知识点都配有完整的示例(包括...

    jquery-ajaxqueuer:ajax队列的jquery插件

    jquery plugin for ajax queue,jQuery Ajax队列扩展。 ####参数说明 $.ajaxQueuer([ajax队列], {配置}); 配置项(具有优先级): type String 请求方式,默认为GET async Boolean 是否为异步,默认为false,即...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    JQuery扩展以及自动执行函数的应用 JQuery阻止事件发生 JQuery扩展 作业 第18周 内容概要 JS正则详解 JS正则详解之验证 组件BootStrap、EasyUI、JQueryUI 插件轮播 Django_Web框架引入 Django工程创建 Django目录...

    JQuery权威指南源代码

    使用jQuery扩展工具函数实现对字符串指定类型的检测 第10章 在指定的查找范围内获取DOM元素 选择器中含有空格符与不含空格符的区别 事件中的target方法优化冒泡现象 使用data()方法在元素上存取移数据 使用data...

    jquery插件使用方法大全

    由于jQuery 1.5的Ajax模块内置使用了延迟对象,因此现在通过jQuery编写Ajax程序将自动获得这一功能。 开发人员借此可以使用无法立即获得的返回值(如异步Ajax请求的返回结果),而且第一次能够附加多个事件处理器。 ...

    jQuery权威指南366页完整版pdf和源码打包

    9.2.1 浏览器的检测 9.2.2 数组和对象的操作 9.2.3 字符串操作 9.2.4 测试操作 9.2.5 url操作 9.3 工具函数的扩展 9.4 其他工具函数—$.proxy() 9.5 综合案例分析—使用jquery扩展工具函数实现对...

    jQuery基础教程(第四版)

    第13章将带领读者深入理解Ajax相关的概念,包括jQuery的延迟处理机制,从而实现等待数据在一段时间后可用时再对其进行处理。 附录A将帮助读者理解闭包——什么是闭包,怎么利用闭包。 附录B向读者介绍使用jQUnit库对...

    xmg-gecco-demo-master.zip

    一个gecco爬虫框架,简单易用,使用jquery风格的选择器抽取元素 支持爬取规则的动态配置和加载 支持页面中的异步ajax请求 支持页面中的javascript变量抽取 利用Redis实现分布式抓取,参考gecco-redis 支持结合Spring...

    python入门到高级全栈工程师培训 第3期 附课件代码

    07 recv与recvfrom的区别及基于udp实现ntp服务 08 基于tcp实现远程执行命令 09 基于tcp实现远程执行命令测试结果 10 粘包现象 11 粘包解决方法 第31章 01 上节课复习 02 socketserver实现并发 03 socketserver模块...

    [主机域名]phpajax域名查询_domainsearch.zip

    我们还使用了一些流行的前端框架和库,如Bootstrap和jQuery,以加快前端开发的速度,并提供丰富的UI组件和交互效果。 我们的项目源码还使用了一些其他的技术和工具,以提高系统的性能和可靠性。我们使用了缓存技术来...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    [主机域名]PHP+AJAX的whois查询程序_whois.zip

    我们还使用了一些流行的前端框架和库,如Bootstrap和jQuery,以加快前端开发的速度,并提供丰富的UI组件和交互效果。 我们的项目源码还使用了一些其他的技术和工具,以提高系统的性能和可靠性。我们使用了缓存技术来...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包10

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    大名鼎鼎SWFUpload- Flash+JS 上传

     file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值  flash_url : "http://www.swfupload.org/swfupload_f9.swf", Flash控件的URL  flash_width : "1px",  flash_...

Global site tag (gtag.js) - Google Analytics