用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 相关文章推荐
模仿百度三维地图的js数据分享
May 12 Javascript
js左右弹性滚动对联广告代码分享
Feb 19 Javascript
jquery ui resize 中border-box的bug修正
Apr 26 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
Jun 21 Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
VUE2.0中Jsonp的使用方法
May 22 Javascript
vuex直接赋值的三种方法总结
Sep 16 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 Javascript
Vue实现动态查询规则生成组件
May 27 Vue.js
Node.js实现断点续传
Jun 23 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框架codeigniter中如何使用框架的session
2013/06/24 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
php命令行模式代码实例详解
2021/02/26 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
js确定对象类型方法
2012/03/30 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
js实现录音上传功能
2019/11/22 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
python爬虫请求头设置代码
2020/07/28 Python
python 调整图片亮度的示例
2020/12/03 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
介绍一些UNIX常用简单命令
2014/11/11 面试题
英语教师求职信
2014/06/16 职场文书
品质标语大全
2014/06/21 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
导游词格式
2015/02/13 职场文书
奖励通知
2015/04/22 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Python集合set()使用的方法详解
2022/03/18 Python