`
czpae86
  • 浏览: 720544 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ajax 封装(备忘)

 
阅读更多

function openLink(o){	
	var XHR,
		config = (typeof o === 'object' && o!=null)?o : {},
		scope = config.scope||window,
		method = config.method||'GET',
		cb = typeof config.callback === 'function' ? config.callback : function(){},
		url = config.url,
		params = config.params||{},
		p = null,
		addURLParam = function(url,key,value){
			url += (url.indexOf('?') == -1 ? '?' : '&');
			url += encodeURIComponent(key) + '=' + encodeURIComponent(value);
			return url;
		},
		timeout = 30000;//30s
		
	if(typeof url !== 'string'){
		throw new Error('配置的请求地址错误!');
	}
	
	if(typeof XMLHttpRequest != 'undefined'){
		XHR = new XMLHttpRequest();
	}else if(typeof ActiveXObject != 'undefined'){
		var versions = ['MSXML2.XMLHTTP.3.0','Msxml2.XMLHTTP.6.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
		for(var i=0,len=versions.length;i<len;i++){
			try{
				XHR = new ActiveXObject(versions[i]);
				break;
			}catch(ex){
				
			}
		}
	}else{
		throw new Error('您的浏览器不能创建XHR对象!');
	}
	
	var t = setTimeout(function(){
		XHR.abort();
		throw new Error('timeout!');
	},timeout);
	
	XHR.onreadystatechange = function(){
		if(XHR.readyState == 4){
			if((XHR.status >= 200 && XHR.status < 300) || XHR.status == 304){
				//success
				//XHR.responseText
				clearTimeout(t);
				cb.call(scope,XHR.responseText);
			}else{
				//exception
				throw new Error('Request is unsuccessfull: '+ XHR.status);
			}
		}
	}
	if(method.toUpperCase() == 'GET'){
		for(var f in params){
			url = addURLParam(url,f,params[f]);
		}
	}else if(method.toUpperCase() == 'POST'){
		var a = [];
		for(var f in params){
			a.push(f+'='+encodeURIComponent(params[f]));
		}
		p = a.join('&');
	}
	
	XHR.open(method,url,true);
	XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	XHR.send(p);
}

 

使用:

<script type="text/javascript">
		openLink({
			method : 'post',
			url : 'data/test.do',
			params : {e:'中文abc123',r:5},
			callback : function(responseText){
				var o = eval('('+responseText+')');
				alert(o.success);
			}
		});
	</script>
 
分享到:
评论

相关推荐

    C# ASP.NET 模块 - 网站备忘录

    当用户选择一条备忘并点击“编辑”按钮时,前端通过Ajax获取选定备忘的详细信息,填充到表单中,用户修改后再次提交,后端更新数据库中的对应记录。 删除备忘录通常需要确认操作,以防误删。用户选择要删除的备忘,...

    运用jsp实现万年历包含简易万年历、带阴历的万年历和带有备忘录的万年历

    JSP作为视图层负责渲染页面,Servlet或控制器处理用户请求和业务逻辑,而模型层则封装数据访问和业务对象。这样可以使代码结构清晰,易于扩展。 对于日期选择,可以使用JavaScript库如jQuery UI的Datepicker组件,...

    基于jQuery实现的带备忘录功能的日期选择器特效源码.zip

    2. **Ajax**:如果备忘录需要实时同步到服务器,开发者可能使用Ajax异步请求,通过$.ajax()或者$.getJSON()等方法与后台交互,实现数据的增删改查。 3. **CSS3动画**:为了提升用户体验,日期选择器的弹出、隐藏及...

    Programming-cheat-sheets:您很快就能在这里找到各种编程备忘单!

    4. **Web开发**:对于前端开发者,HTML、CSS和JavaScript是基础,备忘单会涵盖标签、选择器、布局技巧、DOM操作和AJAX请求等内容。对于后端开发者,常见框架如Express.js、Django、Spring Boot的API调用和路由设置也...

    JS日历便利贴.rar

    例如,jQuery的`$.ajax()` 方法封装了Ajax操作,Vue.js则提供了数据绑定和组件化的功能,使得日历应用的逻辑更加清晰。 总结起来,《JS日历便利贴》是一个结合了HTML、CSS、JavaScript以及可能的前端库技术的Web...

    cheat-sheets:嗯,我只提供一些随机备忘单。 享受

    - 回调函数:常见于异步操作,如事件处理和Ajax请求。 - Promise:用于管理异步操作,提供链式调用和错误处理。 - async/await:基于Promise的语法糖,使得异步代码更接近同步写法。 8. **ES6+新特性**: - 类...

    BlueMoon:BlueMoon Js是初学者的Javascript备忘单

    "BlueMoon: BlueMoon Js是初学者的Javascript备忘单"这个资源可能是为了帮助新手快速掌握JavaScript的基础知识,以便他们能够创建功能丰富的网页或应用程序。 JavaScript语法基础: 1. 变量:JavaScript中的变量...

    基于PHP的虐神百度开源系统 v1.0.zip

    可能还涉及AJAX技术,实现页面无刷新的数据更新。 5. **权限管理**:对于一个开源系统,权限控制是非常重要的,可能会有用户注册、登录功能,以及不同角色的权限分配。 6. **API调用和处理**:系统可能需要处理...

    Pro JavaScript Design Patterns

    在JavaScript中,设计模式可以帮助我们解决模块化、封装、继承和多态等面向对象编程的关键问题,以及处理异步操作和事件驱动编程等特性。 书中的内容可能涵盖了以下几个主要的设计模式类别: 1. 创建型模式:如...

    All About Design Patterns

    命令模式是一种行为设计模式,它把一个请求封装为一个对象,从而使我们可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。例如,在文件提供的示例中,`service` 方法接收一个 `...

    c#设计模式以及随书源码

    - 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的...

    ASP.NET设计模式.pdf中文版

    18. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 19. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个...

    J2EE相关设计模式23种Java设计模式

    17. **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的状态并在需要时恢复它。在J2EE中,可以用于保存用户会话状态。 18. **观察者模式(Observer)**:定义对象之间的一对多依赖关系,当一个对象的...

    JAVA设计模式JAVA设计模式JAVA设计模式

    7. **备忘录模式**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象的状态。 8. **解释器模式**:提供一个解析表达式的方式,为特定语言或领域定义一个文法,并...

    可拖动的jQuery便签特效

    这种特效通常用于创建提醒、记录备忘或者展示动态信息,极大地提升了网站的用户体验。 首先,我们来了解jQuery的核心概念。jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互。...

    设计模式迷你手册设计模式迷你手册

    命令模式将请求封装为一个对象,以便使用不同的请求、队列请求或支持撤销操作。责任链模式使多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合。备忘录模式记录对象的内部状态,以便以后恢复。状态模式...

    JAVA技术体系

    - **面向对象**:介绍类、对象、继承、封装、多态等面向对象编程的基本原理。 - **异常处理**:学习如何在 Java 程序中有效地处理错误和异常。 - **JDK 提供的类库**: - **IO 操作**:讲解如何进行文件读写、字符...

    jquery 资料合集 实例

    使用其间也有一点点心得,其实这些心得,在jquery的文档上面也可能有讲,不过还是记下来,以备忘罢。三层架构, 企业库(Enterprise Library)是微软的模式与实践(Patterns &amp; Practices)的下一代应用程序块...

    时钟Jquery+html5特效代码分享(可设置闹钟并且语音提醒)

    它通过封装了DOM操作、事件处理、动画和Ajax交互等功能,极大地简化了JavaScript编程,提升了开发效率。在本例中,Jquery用于简化对HTML元素的操作以及控制时钟特效的实现逻辑。 ### 语音提醒功能实现 在实现时钟...

Global site tag (gtag.js) - Google Analytics