function myAjax(obj) {
var xmlHttp; //保存xmlHttpRequest对象
var type = obj.requestType; //保存请求方式
var cache = obj.cache || false; //get时是否使用缓存,默认否
var success = obj.success; //数据请求成功的回调方法
var error = obj.error; //发生错误的回调方法
var async = obj.async || false; //是否异步,默认否
var data = []; //存储用户发来的数据
var url = obj.url; //用户请求地址 createXmlHttp(); //执行xmlHttp创建函数 //创建xmlHttp失败
if(!xmlHttp) {
console.log("我的老哥,创建xmlHttp对象失败啦!您的浏览器不支持xmlHttpRequest对象");
} try {
//定义状态监听函数
xmlHttp.onreadystatechange = function () {
switch (xmlHttp.readyState) {
case 1:
console.log("open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。");
break;
case 2:
console.log("Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。");
break;
case 3:
console.log("所有响应头部都已经接收到。响应体开始接收但未完成。");
break;
case 4:
if (xmlHttp.status == 200) {
console.log("HTTP 响应已经完全接收。");
success(xmlHttp.responseText); //调用回调函数
}
break;
default:
error(xmlHttp.statusText);
break;
}
}; //把用户传来的数据转换成字符串
for (var i in obj.data) {
data.push(i + '=' + obj.data[i]);
}
data = data.join('&'); if (type.toUpperCase() == 'GET') { //如果是get请求
if (cache == false) { //如果get请求不使用缓存
xmlHttp.open('get', url + '?' + data + '&random=' + Math.random(), async);
xmlHttp.send('null');
} else { //如果get请求使用缓存
xmlHttp.open('get', url + '?' + data, async);
xmlHttp.send('null');
}
} else if (type.toUpperCase() == 'POST') //如果是post请求
{
xmlHttp.open('post', url, async);
xmlHttp.setRequestHeader("Content-Type"
, "application/x-www-form-urlencoded");
xmlHttp.send(data);
} else {
throw new Error('您的请求方法有误!');
}
} catch (error) {
console.log("出错啦:" + error.message);
} //创建xmlHttpRequest对象函数
function createXmlHttp() {
if(window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} } else if (window.XMLHttpRequest){
try {
xmlHttp = new XMLHttpRequest();
} catch(e) {
xmlHttp = false;
}
}
} }
插件基本逻辑:
GET请求:
1.新建XHR对象
2.定义状态监听函数,各种状态对应各种处理
3.调用open方法启动请求,准备发送
4.使用send方法发送请求,参数为null POST请求:
1.新建XHR对象
2.定义状态监听函数,各种状态对应各种处理
3.使用open方法启动请求,准备发送
4.设置http头信息的Content-Type类型,模拟表单发送
5.使用send方法发送请求,参数为自己要发送的东西
插件使用方法:
1.在html页面引入myAjax.js文件之后就可以使用啦
2.
get方法使用例子:

   myAjax({
      requestType: 'get',
url: '/getFunc',
async: true,
cache: false,
data: { name: "lin", age: "20"},
success: function (data) {
alert(data);
},
error: function (statusText) {
alert("请求失败了,以下是具体信息:\n" + statusText);
}
}); post方法使用例子:
myAjax({
requestType: 'post',
url: '/postFunc',
async: true,
data: {name:"shuai", age: 10},
success: function (data) {
console.log(data);
},
error: function (statusText) {
alert("请求失败了,以下是具体信息:\n" + statusText);
}
});

这个插件主要是我为了学习原生ajax和函数封装而写的,还存在很多bug,同样在学习ajax和函数封装的同学可以参考参考,取其精华弃其糟粕,嘻嘻嘻。  

myAjax.js已经在github开源,上面有实现具体例子: https://github.com/nayonglin/myAjax 记得star啊我的老哥!!!!!!

自己封装一个简单的ajax插件的更多相关文章

  1. 封装一个简单的ajax请求

    记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...

  2. 使用jQuery.extend创建一个简单的选项卡插件

    选项卡样式如图,请忽略丑陋的样式,样式可以随意更改 主要是基于jquery的extend扩展出的一个简单的选项卡插件,注意:这里封装的类使用的是es6中的class,所以不兼容ie8等低版本浏览器呦! ...

  3. 编写一个简单的Jquery插件

    1.实现内容 定义一个简单的jquery插件,alert传递进来的参数 2.插件js文件(jquery.showplugin.js) (function ($) { //定义插件中的方法 var me ...

  4. Directx11学习笔记【四】 封装一个简单的Dx11DemoBase

    根据前面两个笔记的内容,我们来封装一个简单的基类,方便以后的使用. 代码和前面类似,没有什么新的内容,直接看代码吧(由于代码上次都注释了,这次代码就没怎么写注释o(╯□╰)o) Dx11DemoBas ...

  5. 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件

    先拉开MSDN的文档,大致读一遍 (https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets) WebSocket 是一 ...

  6. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  7. 代码改变世界 | 如何封装一个简单的 Koa

    下面给大家带来:封装一个简单的 Koa Koa 是基于 Node.js 平台的下一代 web 开发框架 Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装 ...

  8. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

  9. 实现一个简单的Vue插件

    我们先看官方文档对插件的描述 插件通常会为 Vue 添加全局功能.插件的范围没有限制--一般有下面几种: 1.添加全局方法或者属性,如: vue-custom-element 2.添加全局资源:指令/ ...

随机推荐

  1. 模板引擎(smarty)知识点总结

    首先我们必须知道使用smarty的流程   1.引入   2.实例化   3.配置 模板目录  编译目录  3.0版本 支持不存在的目录则新建   4.赋值   5.编译显示 某个模板文件(暗示需要哪 ...

  2. Windows 7下将Tomcat Java程序设置为Windows Service

    可以参看以下资料: https://jingyan.baidu.com/article/b2c186c89f5127c46ef6ff08.html http://tomcat.apache.org/t ...

  3. u3d之世界坐标系,屏幕坐标系,视口坐标系,如何获取物体距离摄像机的距离

    世界坐标系就是unity的左手坐标系 屏幕坐标系是Game视图相机拍摄的场景坐标系,左下角(0,0),右上角(Screen.width,Screen.height),单位是像素.Z的位置是以相机的世界 ...

  4. 不写一行代码,利用常用工具和软件批量下载URL资源

    有时候会遇到这种情况:想从某个网站下载一批东西,目标URL是比较规整的,而且结构都一样(仅某些字段不同).但又懒得开IDE专门写个脚本去弄,今天就和大家分享一下,如何利用手边常用的软件和工具,不用写一 ...

  5. thinkphp5使用PHPExcel导入Excel数据

    安装PHPExcel扩展类 地址:https://github.com/PHPOffice/PHPExcel ①通过composer安装 ②手动下载, 放在项目的extend目录下 代码中引入 由于P ...

  6. Linux重启后raid5的名字发生变化

    Linux重启后raid5的名字发生变化 使用raid,每次重启后,都会变换设备路径 比如原来为/dev/md0 重启一次变成了/dev/md127 这个问题,可以使用修改配置文件来解决. 1.mda ...

  7. angular4.0配置本机IP访问项目

    一.查看本机IP 命令行输入 ipconfig,在面板中选择IPv4地址 二.在项目中配置IP 打开package.json文件,修改如下 三.命令行运行 npm start 四.在手机上访问 192 ...

  8. 常见ie css hack

    .all IE{property:value\9;} .gte IE 8{property:value\0;} .lte IE 7{*property:value;} .IE 8/9{property ...

  9. JQueryPagination分页插件,ajax从struts请求数据

    2017-07-16 学完了struts,做了个关于分页的小例子,用到了JQuery分页插件Pagination,先贴下插件下载地址 http://www.jq22.com/jquery-info13 ...

  10. flask WTForms源码分析及自定义WTForms

    首先我们来创建一个From类 from wtforms.form import Form from wtforms import StringField from wtforms.validators ...