`

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-File-Upload for asp.net MVC

    该插件通过AJAX技术实现异步文件上传,使得用户无需刷新页面即可完成文件上传,提高了交互性。 二、ASP.NET MVC概述 ASP.NET MVC是一个用于构建动态网站的开源框架,它采用模型-视图-控制器(MVC)设计模式,分离...

    jquery.jqprint-0.3.rar

    在JavaScript的世界里,jQuery是一个广泛使用的库,它极大地简化了DOM操作、事件处理、动画效果和Ajax交互。而当我们需要将网页中的某些内容打印出来时,jQuery的扩展插件jqPrint就显得尤为实用。本文将深入探讨...

    JQuery-latest-Chinese-document.rar_jquery_jquery-latest

    7. **插件(Plugins)**:jQuery 社区开发了大量的插件,扩展了其功能,如表单验证、图像轮播、日期选择器等。 **学习jQuery的资源** 压缩包中的“JQuery latest Chinese document.chm”是中文版的官方文档,涵盖...

    jQuery-File-Upload

    5. **异步上传**:使用AJAX技术实现后台无刷新上传,提高网页响应速度。 6. **跨域上传**:支持CORS(跨源资源共享),使得不同域名间的文件上传成为可能。 7. **自定义事件与回调函数**:提供多种事件回调,如...

    jquery.uploadify-v2.1.4

    Uploadify的安装并不复杂,主要包括两个步骤:引入jQuery和Uploadify的JavaScript及CSS文件。在HTML文件中,你需要添加以下引用: ```html <script src="jquery.js"> <script src="jquery.uploadify.min.js"> ``` ...

    jQuery1.7帮助文档jQuery-UI-Reference-1.7

    《jQuery1.7帮助文档jQuery-UI-Reference-1.7》是一份详细解析jQuery 1.7版本及其UI库的参考资料,对于开发者来说,它提供了丰富的API介绍、使用示例以及问题解决策略。这份文档主要针对那些希望通过jQuery 1.7版本...

    jQuery权威指南-源代码

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

    Jquery-Cheat-Sheet-1.2

    - **任意对象扩展**:通过`$.extend()`方法,可以递归地将一个或多个属性添加到目标对象上,实现对象的扩展和合并。 - **格式化插件**:`$.fn`用于定义插件,插件可以以 `{name: plugin}` 的形式注册在jQuery的函数...

    jquery-ajaxqueuer:ajax队列的jquery插件

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

    jquery的 ajax序列插件

    例如,你可以结合其他jQuery插件,如表单验证或数据处理插件,来扩展队列任务。 **总结** `gnarf-jquery-ajaxQueue`插件通过提供有序的Ajax请求管理,解决了在多步骤操作中保持数据流顺序的问题。通过简单的API,...

    前端项目-jquery-ajaxQueue.zip

    总之,“前端项目-jquery-ajaxQueue”是一个实用的前端工具,它扩展了jQuery的功能,让异步Ajax请求的管理变得更加有序和可控。掌握并应用这个插件,无疑将提升我们处理复杂前端交互的能力。在实际开发中,善用ajax...

    jQuery使用ssi-uploader插件实现可拖拽和带预览图的文件上传.zip

    在这个"jQuery使用ssi-uploader插件实现可拖拽和带预览图的文件上传.zip"项目中,我们将探讨如何利用jQuery和一个名为ssi-uploader的插件来创建一个功能丰富的文件上传功能,其中包括拖放操作和上传前的预览功能。...

    jQuery中文API-1.4.2

    jQuery是一款广泛应用于Web开发的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画制作以及Ajax交互。这个资源是jQuery 1.4.2版本的中文API文档,虽然文档标题中提到的是1.4.1,但实际上内容是针对...

    jQuery-1.6-api

    jQuery 1.6中的动画效果更加细腻,可以通过`stop()`方法来停止当前运行的动画,`animate()`方法可以自定义动画过程,`queue()`和`dequeue()`则提供了对动画队列的控制。 8. **选择器性能优化** jQuery 1.6改进了...

    简单的JqueryAjax的示例

    **jQuery AJAX 基础详解** 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。jQuery库使得使用AJAX更加...

    jQuery1-8-2.js和jqueryAPI

    - 虽然jQuery 1.8.2是稳定版本,但相比最新的jQuery版本,可能缺乏一些新特性及性能优化。 - 在引入jQuery库时,需要考虑文件大小,以减少页面加载时间。可以使用CDN(内容分发网络)来加速资源加载。 - 对于现代...

    jquery171-20121018-win

    jQuery插件库中包含数千个预建的解决方案,覆盖了表单验证、图像轮播、图表绘制等各个方面,极大地扩展了jQuery的功能。 总结起来,"jquery171-20121018-win"这个压缩包中的`jquery-1.7.1.js`文件代表了jQuery ...

    jquery (1.32-1.9.1)版本

    7. **插件生态**:jQuery的生态丰富,有大量插件可供选择,如滑动插件`slideshow`, 模态对话框`modal`, 图片懒加载`lazyload`等,它们扩展了jQuery的功能,满足了更多应用场景。 8. **最佳实践**:在使用jQuery时,...

Global site tag (gtag.js) - Google Analytics