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. 线上平滑升级nginx1.12

    .下载相关包,需要和之前用到的依赖包保持一致 wget http://nginx.org/download/nginx-1.12.2.tar.gz wget https://bitbucket.org ...

  2. Webpack 2 视频教程 010 - 配置 ESLint 实现代码规范自动测试 (下)

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  3. javascript字符串与数组转换汇总

    本文给大家分享的是Js中字符串转换成数组,数组转换成字符串的函数,十分的简单实用,有需要的小伙伴可以参考下. 数组转字符串 1.join()方法 ? 1 2 3 4 var s= ["a&q ...

  4. 基于web的网上书城系统开发-----登录注册扩展-------验证码功能

    public class CheckCode extends HttpServlet { private static final long serialVersionUID = 1L; privat ...

  5. 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例

    使用vue-cli可以规范项目,提高开发效率,但是使用vue-cli时需要一些ECMAScript6的知识,特别是ES6中的模块管理内容,本章先介绍ES6中的基础与模块化的内容再使用vue-cli开发 ...

  6. easy ui Tree请求跨域数据

    扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...

  7. python_IO编程

    本篇文章将介绍python里面的I/O编程.更多内容请参考:python学习指南 I/O编程 读写文件时最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们必须了解 ...

  8. div外观例子

    title: div外观例子 date: 2018-1-15 14:00:00 tags: 前端 div css categories: 前端框架 --- 标题 我的标题 内容 Font Awesom ...

  9. 安装cocoapods遇到的问题

    1.终端报下面的错误 ERROR:  While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod 解决方 ...

  10. 【jQuery】(6)---jQuery validate插件

    jQuery  validate插件 一.导入js库                                      先导入jQuery库,然后导入Validate插件,如果是中文提示还需要 ...