原生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的基本功能进行下一步的封装,不得不说的是早就有人专门写 ...
随机推荐
- Spring MVC学习------------WebApplicationContext
父子上下文(WebApplicationContext) 假设你使用了listener监听器来载入配置.一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的. ...
- IOS 'NSInternalInconsistencyException'
今天想写一个请求的天气.好的.废话不多说.先贴代码: 使用AFNetWorking 发送get请求,可是一直报错 IOS 'NSInternalInconsistencyException', re ...
- h5 图片回显
<form method="post" id="imgForm" action ="/hi/holdHead" enctype=&qu ...
- 巧用FPGA中资源
随着FPGA的广泛应用,所含的资源也越来越丰富,从基本的逻辑单元.DSP资源和RAM块,甚至CPU硬核都能集成在一块芯片中.在做FPGA设计时,如果针对FPGA中资源进行HDL代码编写,对设计的资源利 ...
- BZOJ2016: [Usaco2010 Feb]Chocolate Eating
[传送门:BZOJ2016] 简要题意: 贝西收到了N 块巧克力,她会在接下来的D 天里吃掉这些巧克力,她想制定一个计划,让她每 天的快乐度都保持在较高的水品上. 在第一天刚开始的时候,贝西的快乐度为 ...
- caioj1442:第k小的数Ⅱ
[传送门:caioj1442] 简要题意: 给出n个点,每个点都有一个权值,m个操作,操作有两种:第一种是询问l到r的第k小的值,然后输出这个值,第二种是将第x个点的值改为k 题解: 又是一道主席树的 ...
- BZOJ 3211 线段树+并查集
思路: 我们很容易发现 一个数开根号 开几(很小)次 就到了1 1 再怎么开 都是1 由于这个性质 我们就可以用并查集 了 //By SiriusRen #include <cmath> ...
- HTTP 各种特性应用(二)
一.Cookie 通过 Set-Cookie 设置. 下次浏览器请求就会带上. 键值对,可以设置多个. Cookie 属性 max-age 和 expires 设置过期时间 Secure 只在 htt ...
- [Chromium文档转载,第002章]Mojo C++ Bindings API
Mojo C++ Bindings API This document is a subset of the Mojo documentation. Contents Overview Getting ...
- python yield学习
yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数包 ...