原生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的更多相关文章
- 原生javascript封装ajax和jsonp
在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...
- 原生JavaScript封装Ajax
第一次开个人技术博客了,发的第一篇技术文章,欢迎指点…… 欢迎访问本人的独立博客:蓝克比尔 Ajax的实现主要分为四部分: 1.创建Ajax对象 // 创建ajax对象 var xhr = null; ...
- 原生 JavaScript 实现 AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- 原生JavaScript实现AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- 原生JavaScript写AJAX
前端JavaScript: function ajaxGet(url, obj) { var request; if(window.XMLHttpRequest) { request = new XM ...
- 原生javaScript完成Ajax请求
使用原生javaScript完成Ajax请求,首先应该创建一个对象XMLHttprequest,考虑到兼容低版本IE浏览器,使用ActiveXObject对象,代码入下: var request; i ...
- 原生JavaScript封装的jsonp跨域请求
原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 使用原生JS封装Ajax
使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...
- 【Ajax 3】JavaScript封装Ajax
导读:上一篇博客简单介绍了一下对Ajax中的核心对象XMLHttpRequest的封装.那么为了方便对Ajax的应用,我们还需要进一步的对Ajax的基本功能进行下一步的封装,不得不说的是早就有人专门写 ...
随机推荐
- Cocos2d-x第三方类库不支持arm64的问题解决(64位架构)
32位能够兼容64位操作系统. ipad mini2 64位编译有问题. 各种第三方库不支持64位操作系统. 设置build setting 直接上图:
- Delegates, Events, and Anonymous Methods 委托、事件与匿名方法
http://www.cnblogs.com/r01cn/archive/2012/11/30/2795977.html
- poj--2007--Scrambled Polygon(数学几何基础)
Scrambled Polygon Time Limit: 1000MS Memory Limit: 30000KB 64bit IO Format: %I64d & %I64u Su ...
- vue父子间通信案列三($emit和prop用法)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- rowcount和@@rowcount的区别
1 rowcount rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10select * from 表A 这样的查询只会返回 ...
- Flex之登录界面
制作登录框界面 环境搭建:MyEclipse 6.5+Flex Builder 3 Plug-in <?xml version="1.0" encoding="ut ...
- JS模式
策略 命令 迭代器 代理 组合 发布/订阅 单例 享元 职责链 中介者 装饰者 状态 适配器 设计原则: 单一职责.最少知识.开放-封闭
- Linux学习总结(7)——阿里云centeros服务器上安装 jdk,tomcat,mysql
查看服务器的系统版本 # cat /etc/issue 查看服务器是64位还是32位 #uname -a 或者用:#getconf LONG_BIT 查看当前有没有安装jdk #rpm -q ...
- SFINAE 模板替换失败而非报错的应用
体会这一个例子,检查是否是一个类:P187
- android側滑菜单-DrawerLayout的基本使用
眼下主流App开发中,部分是以側滑菜单为主布局架构,曾经做android側滑菜单时.大多选择使用github上的第三方开源框架SildingMenu,可是这个框架还是稍显笨重.好消息是google已经 ...