用JS写的一个Ajax库(实例代码)


Posted in Javascript onAugust 06, 2016

myajax是一个用js编写的一个跨浏览器的ajax库,支持get, post, jsonp请求,精巧,简单。

一、发送GET请求:

myajax.get({
<span style="white-space:pre">	</span>data: {}, //参数
	url: "", //请求地址
	//发生错误是调用
	error: function(data) {
	},
	//请求成功调用
	success: function(data){		
<span style="white-space:pre">	</span>//eval(data); 将字符串转换成json
	}
});

二、发送POST请求:

myajax.post({
	data: {}, //参数
	url: "", //
	//发生错误是调用
	error: function(data) {
	},
	//请求成功调用
	success: function(data){
	//eval(data); 将字符串转换成json
	}
});

三、发送JSONP请求:

myajax.getJSONP({
//参数
data: {
},
url: "", //请求地址
//请求成功调用
success: function(data) {
},
//发生错误时调用
error: function() {
}
});

源码:

var myajax = {

	post: function(params){
		var xmlhttp = this.createXMLHttpRequest();
		if (xmlhttp != null)
		{
			var async = true;
			if (typeof params.async != "undefined")
				async = params.async;
			var data = null;
			if (typeof params.data != "undefined")
				data = params.data;
			var url = "";
			if (typeof params.url != "undefined")
				url = params.url;
			if (url == null || url.length == 0)
				return;
			xmlhttp.open("POST", url, async);
			if (async){
				xmlhttp.onreadystatechange = function(){
				
					if (this.readyState==4){
						if (this.status==200){

							if (typeof params.success != "undefined") {
								params.success(xmlhttp.responseText);
							}
						}
						else {
							if (typeof params.error != "undefined") {
								params.error(xmlhttp.status + xmlhttp.statusText);
							}
							console.error(url + ": " + xmlhttp.status);
						}
					}
				};
			}
			
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			var param = "";
			for (var prop in data) {
				param += prop + "=" + data[prop] + "&";
			}
			param = param.substring(0, param.length - 1);
			xmlhttp.send(param);
			if (!async) {
				
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		
					if (typeof params.success != "undefined") {
						params.success(xmlhttp.responseText);
					}
				else {
					if (typeof params.error != "undefined") {
						params.error(xmlhttp.status + xmlhttp.statusText);
					}
					console.error(url + ": " + xmlhttp.status);
				}
				
			}
		}
	},
	get: function(params){
		var xmlhttp = this.createXMLHttpRequest();
		if (xmlhttp != null)
		{
			var async = true;
			if (params.async != undefined)
				async = params.async;
			var url = "";
			if (params.url != undefined)
				url = params.url;
			if (url == null || url.length == 0)
				return;
			if (params.data != null) {
				var data = params.data;
				var paramPrefix = url.indexOf("?") == -1 ? "?" : "&";
		
				url = url + paramPrefix;
				for (var prop in data) {
					url += prop + "=" + data[prop] + "&";
				}
				url = url.substring(0, url.length - 1);
			}
			xmlhttp.open("GET", url, async);
			if (async){
				xmlhttp.onreadystatechange = function(){
					if (this.readyState==4){
						if (this.status==200){
							if (typeof params.success != "undefined") {
								params.success(xmlhttp.responseText);
							}
						}
						else {
							if (typeof params.error != "undefined") {
								params.error(xmlhttp.status + xmlhttp.statusText);
							}
							console.error(url + ": " + xmlhttp.status);
						}
					}
				};
			}

			xmlhttp.send(null);
			if (!async) {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
					if (typeof params.success != "undefined") {
						params.success(xmlhttp.responseText);
					}
				else {
					if (typeof params.error != "undefined") {
						params.error(xmlhttp.status + xmlhttp.statusText);
					}
					console.error(url + ": " + xmlhttp.status);
				}
						
				
			}
		}
	},
	createXMLHttpRequest: function(){
		if (window.XMLHttpRequest)
		{
			return new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
		//code for IE5 and IE6
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
		return null;
	},
	getJSONP: function(params) {

		var url = null;
		if (typeof params.url != "undefined") {
			url = params.url;
		}
		if (url == null) {
			return;
		}
		
		var ff = "" + new Date().getTime() + (parseInt(Math.random() * 10000000000));
		eval("jsonpCallback_" + ff + "=" + function(data){
	
			if (typeof params.success != "undefined") {
				params.success(data);
			}
		});

		//根据url中是否出现过 "?" 来决定添加时间戳参数时使用 "?" 还是 "&" 
		var paramPrefix = url.indexOf("?") == -1 ? "?" : "&";

		url = url + paramPrefix + "jsonpCallback=" + "jsonpCallback_" + ff;
		var param = "";

		if (typeof params.data != "undefined" && params.data != null) {
		
			var data = params.data;
			for (var prop in data) {
				param += prop + "=" + data[prop] + "&";
			}
			param = param.substring(0, param.length - 1);
		}
		if (param.length > 0)
		url = url + "&" + param; 
		var script = document.createElement("script"); 
		document.body.appendChild(script); 
		script.src = url; 
		script.charset ="UTF-8";
		// for firefox, google etc.
		script.onerror = function() {
			if (typeof params.error != "undefined") {
				params.error();
			}
			
	 	}
		script.onload = function() {

		document.body.removeChild(script); 
		} 
		// for ie 
		script.onreadystatechange = function() { 
		  if (this.readyState == "loaded" || this.readyState == "complete") { 
		    document.body.removeChild(script);
		  } 
		}
	}

};

以上这篇用JS写的一个Ajax库(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery与JSon实现的无刷新分页代码
Sep 13 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
聊一聊jQuery插件uploadify使用方法
Aug 24 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
AngularJS中一般函数参数传递用法分析
Nov 22 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
js实现简单数字变动效果
Nov 06 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 Javascript
微信小程序中button去除默认的边框实例代码
Aug 01 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 #Javascript
JS获取和修改元素样式的实例代码
Aug 06 #Javascript
原生js获取元素样式的简单方法
Aug 06 #Javascript
浅析Node.js实现HTTP文件下载
Aug 05 #Javascript
JS中对Cookie的操作详解
Aug 05 #Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
Aug 05 #Javascript
js实现精确到毫秒的倒计时效果
Aug 05 #Javascript
You might like
PHP教程 变量定义
2009/10/23 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
Laravel下生成验证码的类
2017/11/15 PHP
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
javascript基本类型详解
2014/11/28 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
jquery延迟对象解析
2016/10/26 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
解决python删除文件的权限错误问题
2018/04/24 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
python文字转语音实现过程解析
2019/11/12 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
电台实习生求职信
2014/02/25 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
红与黑读书笔记
2015/06/29 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL