原生JavaScript 封装ajax

 

function myajax(options){
//新建一个局部对象 用来存放用户输入的各种参数
var opt={
type:options.type||"get",//获取用户输入的传输方法,可选,不写为get
data:options.data||"",//获取用户输入的数据
dataType:options.dataType||"",//获取用户输入的数据类型比如json 或者xml
url:options.url||"",//用户输入的url
success:options.success||null//成功函数。
}

if(opt.url==""){//如果用户没有输入URL,这样是不允许的 。直接返回,不执行以后的操作
alert("url不能为空");
return;
}
if(options.type){
opt.type=options.type.toLowerCase();//将用户输入的POST等方法变成小写
}
//新建一个连接对象。标准浏览器中 都创建XMLHttpRequest 对象。非标准的浏览器中新建ActiveXObject
var xhr=null;
try{
xhr=new XMLHttpRequest;
}catch(e){
xhr=new ActiveXObject("Micsoft.XMLHTTP");
}
//如果用户用get方法,则需要拼接URL,将用户的数据放到URL传到后台
if(opt.type=="get"&&opt.data){
opt.url+="?"+opt.data;
}
xhr.open(opt.type,opt.url,true);//调用xhr.open方法连接后台借口
//如果是get方法,则send函数不传值、
if(opt.type="get"){
xhr.send(null);
}else{
//如果是post方法 则需要加一个连接头。且send函数中 传入用户的数据
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
xhr.send(opt.data);
}
//连接完毕,等后台返回结果和数据
xhr.onreadystatechange=function(){
if(xhr.readyState==4){//readyState有5种状态码。0,1,2,3,4
if(xhr.status==200){//http状态码为200代表成功
var data=xhr.responseText;//新建一个变量保存后台返回的数据
if(opt.dataType.toLowerCase()=="xml"){
data=xhr.responseXML;//如果后台返回的XML格式的数据.用responseXML来获取
}
if(opt.dataType.toLowerCase()=="json"){
data=JSON.parse(data);//如果是json 则用parse来将字符串转化为对象
}
if(typeof opt.success==='function'){
opt.success(data);//如果有成功的回调函数 则将后台数据当做回调函数的参数返回过去
}
}else{
alert("出错啦"+xhr.status)//如果状态码不为200,连接失败,返回http状态码
}

}

}
}

 

补充:

readyState的状态码含义

0:请求未初始化

1:服务器连接已建立

2:请求已接受

3:请求处理中

4:请求完成,且响应就绪。

原生JavaScript 封装ajax的更多相关文章

  1. 原生javascript封装ajax和jsonp

    在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...

  2. 原生JavaScript封装Ajax

    第一次开个人技术博客了,发的第一篇技术文章,欢迎指点…… 欢迎访问本人的独立博客:蓝克比尔 Ajax的实现主要分为四部分: 1.创建Ajax对象 // 创建ajax对象 var xhr = null; ...

  3. 原生 JavaScript 实现 AJAX、JSONP

    相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...

  4. 原生JavaScript实现AJAX、JSONP

    相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...

  5. 原生JavaScript写AJAX

    前端JavaScript: function ajaxGet(url, obj) { var request; if(window.XMLHttpRequest) { request = new XM ...

  6. 原生javaScript完成Ajax请求

    使用原生javaScript完成Ajax请求,首先应该创建一个对象XMLHttprequest,考虑到兼容低版本IE浏览器,使用ActiveXObject对象,代码入下: var request; i ...

  7. 原生JavaScript封装的jsonp跨域请求

    原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...

  8. 使用原生JS封装Ajax

    使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...

  9. 【Ajax 3】JavaScript封装Ajax

    导读:上一篇博客简单介绍了一下对Ajax中的核心对象XMLHttpRequest的封装.那么为了方便对Ajax的应用,我们还需要进一步的对Ajax的基本功能进行下一步的封装,不得不说的是早就有人专门写 ...

随机推荐

  1. java枚举在android项目应用

    今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了.然后修复了整整两天.然后我又一次整理了一遍,重构就算不上了. 然后就用上了枚举. 什么是 ...

  2. swift具体解释之八---------------下标脚本

    swift具体解释之八-----下标脚本 下标脚本 能够定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中.能够觉得是訪问对象.集合或序列的快捷方式.不须要 ...

  3. Install the IIS 6.0 Management Compatibility Components in Windows 7 or in Windows Vista from Control Panel

    https://technet.microsoft.com/en-us/library/bb397374(v=exchg.80).aspx Install the IIS 6.0 Management ...

  4. ControlDesigner

    GetHitTest https://stackoverflow.com/questions/7762397/how-do-i-click-a-usercontrols-child-in-design ...

  5. VMware中CentOS6.5启动出现An error occurred during the file system check

     

  6. vue的钩子函数

    1.computed 计算属性 计算属性将被混入到 Vue 实例中.所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 1..aPlus: { get: function ...

  7. HDU 4359 Easy Tree DP? 组合数学+动归

    题意:定义一种树,每个节点的权值都是20到2n-1,每个权值出现一次,每个节点的左子树的权值和小于右子树,除非只有一个子树.给你n和d,问有n个节点且恰好深度是d的这种树有多少种. 比赛的时候我没有做 ...

  8. js创建dom操作select

    document.getElementById("column-left").getElementsByTagName("header")[0].onclick ...

  9. 硬件时间,操作系统时间,Windows 和linux 双系统时间差8小时问题说明

    1.硬件时间:硬件时钟是存储在主板上CMOS里的时间即BIOS时间,关机后该时钟依然运行,主板的电池为它供电.对应于嵌入式设备有一个RTC模块.硬件时钟即RTC时钟.信息比较少没时区.夏令时的概念. ...

  10. Node测试文章收藏

    1.Nodejs实战—测试Node程序 讲解了TDD与BDD,TDD的基本原则,单元测试常用框架及使用,例如assert断言库,  chai断言库,  should.js断言库,断言库搭配测试框架(m ...