`
quxiaoyong
  • 浏览: 5888 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

Ajax简易框架

阅读更多
    上个月写的一个简易ajax模板。也参考了一些网上的资料,本着“取之于网络,用之于网络”的原则,先将源代码贴出来,代码中有详细的注释。欢迎各种形式的讨论和指正,感谢每一位读者。

/**
 * Author:quxiaoyong<br/>
 * Date:2010年11月30日</br>
 * Description:Ajax通用模板</br>
 * Example:<br/><pre>
 * ----------------------------------------------------------------
 * var ajax = new Ajax("1.jsp");//var ajax = new Ajax();this.setRequestUrl("1.jsp");等效								
 * ajax.setParams("SingleTotalSum=6000");//设置参数列表			
 * ajax.setEncodeURI(true);//设置编码为true
 * ajax.setMethod('get');//将http设置为get方法
 * ajax.setElementID("singleTotalSum");//设置DOM元素ID
 * ajax.onLoading = function() {
 *		//Do what you want to do
 *	};
 *	ajax.onLoaded = function() {
 *		//Do what you want to do
 *	};
 *	ajax.onInteractive = function() {
 *		//Do what you want to do
 *	};
 *	ajax.onCompletion = function() {
 *		//Do what you want to do
 *	};
 *	ajax.runAjax();
 * ---------------------------------------------------------------
 * </pre>
 */
function Ajax(url) {

	//失败提示信息
	var _AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website\n",

	//请求的url,不包含传递参数的纯地址
	_requestUrl = url,

	//请求方法,默认为post方式
	_method = "post",

	//请求时传递的参数
	_params = "",

	//是否要编码uri字符串
	_encodeURI = true,

	//是否要动态执行服务器端返回的脚本
	_execute = false,

	//DOM对象ID
	_elementID = "",

	_responseText = "",

	_responseXML = "";

	//设置请求的url
	this.setRequestUrl = function(_url) {
		_requestUrl = _url;
	};

	//获取请求的url
	this.getRequestUrl = function() {
		return _requestUrl;
	};

	//设置http方法
	this.setMethod = function(method) {
		method = method.toLowerCase();
		if (method == 'get' || method == 'post') {
			_method = method;
		}
	};

	//获取http方法
	this.getMethod = function() {
		return _method;
	};

	//设置参数列表
	this.setParams = function(params) {
		_params = params;
	};

	//获取参数列表
	this.getParams = function() {
		return _params;
	};

	//设置是否编码
	this.setEncodeURI = function(b) {
		_encodeURI = b == true;
	};

	//获取是否编码
	this.isEncodeURI = function() {
		return _encodeURI == true;
	};

	//设置是否动态执行服务器返回的脚本
	this.setExecuteScript = function(execute) {
		_execute = execute == true;
	};

	//获取是否动态执行服务器返回的脚本
	this.isExecuteScript = function() {
		return _execute == true;
	};

	//设置DOM元素ID
	this.setElementID = function(elementID) {
		_elementID = elementID;
	};

	//获取DOM的ID
	this.getElementID = function() {
		return _elementID;
	}

	//获取responseText的值
	this.getResponseText = function() {
		return _responseText;
	};

	//获取responseXMl的值
	this.getResponseXML = function() {
		return _responseXML;
	}

	//回调函数,加载中
	this.onLoading = function() {
	};

	//回调函数,加载完成
	this.onLoaded = function() {
	};

	//回调函数,加载完成,但还需要解析相应数据
	this.onInteractive = function() {
	};

	//回调函数,加载完成,且数据解析完毕
	this.onCompletion = function() {
	};

	//创建XHR对象,IE6及以下版本的浏览器需要用ActiveXObject对象创建
	this.createXHR = function() {
		this.XHR = window.XMLHttpRequest ? new XMLHttpRequest()
				: new ActiveXObject("Microsoft.XMLHTTP");
		if (!this.XHR) {
			this.failed = true;
		}
	};

	//设置参数
	this.setVariable = function(name, value) {
		//一个name,一个value再加一个等号,至少需要3个字符
		if (_params.length < 3) {
			_params = name + "=" + value;
		} else {
			_params += "&" + name + "=" + value;
		}
	};

	//编码名值对,并返回以等号连接后的字符串结果
	this.encodeVariable = function(name, value) {
		return (encodeURIComponent(name) + "=" + encodeURIComponent(value));
	};

	//编码字符串
	this.encodeURLString = function(s) {
		varArray = s.split("&");
		for ( var i = 0; i < varArray.length; i++) {
			urlVars = varArray[i].split("=");
			if (urlVars[0].indexOf('amp;') != -1) {
				urlVars[0] = urlVars[0].substring[4];
			}
			varArray[i] = this.encodeVariable(urlVars[0], urlVars[1]);
		}
		return varArray.join("&");
	};

	//eval允许动态执行javascript
	this.runResponse = function() {
		eval(_responseText);
	};

	//运行ajax主逻辑
	this.runAjax = function(url) {
		this.responseStatus = new Array(2);
		if (this.failed && _AjaxFailedAlert) {
			alert(_AjaxFailedAlert);
		} else {
			if (url) {
				if (_params.length) {
					this.setParams(this.getParams() + "&" + url);//_params = _params + "&" + url;
				} else {
					_params = url;
				}
			}
			if (_encodeURI) {
				var d = new Date();
				var timeval = d.getTime();
				_params = this.encodeURLString(_params);//编码
				this.setVariable("rndval", timeval);//追加时间参数,避免浏览器缓存
			}
			if (_elementID) {
				this.elementObj = document.getElementById(_elementID);
			}
			if (this.XHR) {
				var self = this;
				if (_method == 'get') {
					var totalURLString = _requestUrl + "?" + _params;
					this.XHR.open(_method, totalURLString, true);
				} else {
					this.XHR.open(_method, _requestUrl, true);
				}
				if (_method == 'post') {
					try {
						this.XHR.setRequestHeader('Content-Type',
								'application/x-www-form-urlencoded');
					} catch (e) {
					}
				}
				this.XHR.send(_params);
				this.XHR.onreadystatechange = function() {
					switch (self.XHR.readyState) {
					case 1:
						self.onLoading();
						break;
					case 2:
						self.onLoaded();
						break;
					case 3:
						self.onInteractive();
						break;
					case 4:
						_responseText = self.XHR.responseText;
						_responseXML = self.XHR.responseXML;
						self.responseStatus[0] = self.XHR.status;
						self.responseStatus[1] = self.XHR.statusText;
						self.onCompletion();
						if (_execute) {
							self.runResponse();
						}
						if (self.elementObj) {
							var elementNodeName = self.elementObj.nodeName;
							elementNodeName.toLowerCase();
							if (elementNodeName == 'input'
									|| elementNodeName == 'select'
									|| elementNodeName == 'option'
									|| elementNodeName == 'textarea') {
								self.elementObj.value = _responseText;
							} else {
								self.elementObj.innerHTML = _responseText;
							}
						}
						_params = "";
						break;
					}
				};
			}
		}
	};
	this.createXHR();
}

分享到:
评论

相关推荐

    bingo AJAX简易框架

    AJAX简单的框架。 使用方便,满足基本需求。

    spring MVC简易框架

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要负责处理 HTTP 请求和响应,实现模型-视图-控制器(MVC)的设计模式。在项目开发初始架构中,Spring MVC 能够帮助开发者快速搭建...

    Ajax三级无刷新级联实例使用CallBackObject.js 简易Ajax框架

    `CallBackObject.js`作为一个简易的Ajax框架,简化了开发者实现这类功能的步骤,使得即使对于初学者来说,也能快速理解和应用Ajax技术。在实际项目中,可以根据需求对其进行扩展或与其他库(如jQuery、Vue.js等)...

    AJAX简易教程及实例

    **AJAX简易教程及实例详解** AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验。...

    自己写的ajax框架

    本项目是一个个人编写的简易AJAX框架,旨在提供一种轻量级、易于理解和使用的解决方案。 【描述】:“代码简单,容易懂,灵活,把框架导入页面以后,只需两句话就可实现ajax” 这个描述突出了该框架的主要特点:...

    ssi框架,ajax,json项目小例子

    在描述中提到的"ssi框架"可能是指一个特定的项目或自定义实现,它可能是用SSI技术构建的一个简易框架,用于简化网页的动态内容生成。对于初学者来说,学习SSI框架可以理解服务器端如何处理和嵌入动态信息,为后续...

    一个ajax 和 dwr 框架的最简单2个应用--简易聊天室

    本项目“一个Ajax和DWR框架的最简单2个应用--简易聊天室”旨在通过这两个技术的结合,实现一个基本的在线聊天功能。 Ajax是一种不刷新整个页面即可与服务器交换数据并更新部分网页的技术,它通过JavaScript异步调用...

    学习jQuery源码时模仿写出来的一个简易框架实现了jQuery的部分核心功能

    本文将基于提供的标题和描述,详细解析一个模仿jQuery源码实现的简易框架,帮助读者理解其核心功能。 首先,jQuery的核心功能包括以下几个方面: 1. **选择器(Selectors)**:jQuery提供了类似于CSS的选择器,如`...

    简易java框架开源订销管理系统

    简易java框架开源订销管理系统简介 该系统是一个使用Java语言开发,以国内开源Web MVC框架EasyJWeb作系统引擎的Java Web应用系统.系统主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料...

    EasyAjax

    **EasyAjax:简易Ajax开发框架** EasyAjax是一个针对ASP.NET平台设计的轻量级Ajax开发框架,由Visual Studio 2005开发完成。它强调简单易用性,仅包含一个JavaScript文件和三个类,使得开发者能快速地在项目中集成...

    Struts 2 and Ajax

    在当今——Web 2.0概念铺天盖地的Internet环境下,简易的AJAX集成对于一个成功的WEB框架来说是不可或缺的。因此,Struts 2其中的一个重要的功能(Feature)就是“First-class AJAX support - Add interactivity and ...

    基于SSM框架下,简易图片上传

    这个简易图片上传的功能就是在这样的背景下实现的,主要用于处理头像更换、商品展示等需要上传图片的场景。下面我们将深入探讨SSM框架以及如何在其中实现图片上传功能。 1. **SSM框架详解** - **Spring**:Spring...

    基于SSH框架的简易博客系统

    **基于SSH框架的简易博客系统** SSH框架是Java Web开发中的一个经典组合,由Spring、Struts和Hibernate三个开源框架组成。本项目是利用这些框架在Eclipse集成开发环境中构建的一个简单博客系统,旨在提供一个基础的...

    简易 Ajax 论坛

    在“简易 Ajax 论坛”项目中,我们将深入探讨如何利用 Ajax 实现一个动态更新的论坛页面。 1. **Ajax 基础** - **异步通信**:Ajax 的核心特性是异步,用户在发送请求后仍能继续浏览其他内容,而无需等待服务器...

    一步一步实现一个简易的jQuery框架

    在你的简易框架中,你需要实现类似`$("#id")`或`$(".class")`这样的选择器。这需要理解CSS选择器,并用JavaScript实现它们。你可以从简单的ID选择器和类选择器开始,然后扩展到更复杂的选择器组合。 2. **DOM操作**...

    网页版简易聊天系统(asp+ajax)

    【网页版简易聊天系统(asp+ajax)】是一款基于ASP技术与AJAX异步通信机制构建的在线聊天应用。此系统旨在提供一个简单的交互平台,让用户可以实现即时的文字交流,无需刷新页面即可获取并发送消息,提升了用户体验。...

Global site tag (gtag.js) - Google Analytics