ajax温习
工作中一直有写JS,也一直有用jquery,在感受jquery便利之余,也对它产生了依赖,已至于许多功能只知使用而不知原生写法,就像ajax。
今天不小心翻看了以前学习的视频,温故了一下原生ajax写法及原理,正好捣鼓捣鼓。这也是面试经常会遇到的问题,动手封装下原生的ajax函数何乐而不为了,代码如下:
function ajaxfn(obj){
/*传入一个json对象
*type:为请求方式,如get,post
*data:传输的数据
*async:异步请求,默认为true
*dataType:返回的数据类型
*url:这请求地址
*fnok:为请求成功时的回调,默认传入返回的数据
*fnerror:为请求失败的回调,默认传入当前的服务器状态码,如500,404
*/
var xhr=null,
type=obj.type?obj.type.toLowerCase():"get",//默认是get
url=obj.url,
data=obj.data?JSON.stringify(obj.data):null,
dataType=obj.dataType?obj.dataType.toLowerCase():"text",
async=true;//默认是异步
if(obj.async==false){
async=false;
}
//创建XMLHttpRequest对象
try{
xhr=new XMLHttpRequest();
}catch(e){
//兼容ie6
xhr=new ActiveXObject('Microsoft.XMLHTTP');
}
//连接服务器
xhr.open(type,url,async);
//发送请求
if(type=="post"){//如果是post请求得先设置请求头,application/x-www=form-urlencoded适合绝大多数的应用场景
xhr.setRequestHeader("content-type","application/x-www=form-urlencoded");
}
xhr.send(data);
//监听过程
xhr.onreadystatechange=function(){
/*readyState请求状态
*0:请求未初始化(还没有调用open())
*1:请求已经建立,但是还没有发送(还没有调用send())
*2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
*3:请求处理中,通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
*4:响应已经完成;可以获取并使用服务器的响应了.
*/
if(xhr.readyState==4){//请成完成
/*常用http状态码
*200:服务器成功返回网页
*304:未修改,使用缓存
*403:服务器拒绝请求
*404:请求的网页不存在
*503:服务器暂时不可用
*500:服务器内部错误
*/
if(xhr.status==200){//返回成功
switch (dataType){
case "text"://接收到字符串
obj.fnok && obj.fnok(xhr.responseText);
break;
case "json"://接收到json字符串数据
obj.fnok && obj.fnok(JSON.parse(xhr.responseText));
break;
case "xml"://接收到xml格式数据
obj.fnok && obj.fnok(xhr.responseXML);
break;
}
}else{
obj.fnerror && obj.fnerror(xhr.status);
}
}
}
}
}
注:为了兼容IE6,ie7,ie8(兼容模式)支持JSON对象的stringify(),parse()方法,引入了一个json2.js文件,文件下载地址如下:https://github.com/douglascrockford/JSON-js
使用示例如下:
ajaxfn({
type:'get',//请求方式
url:'test.txt',//请求地址
dataType:'text',//返回的数据类型
fnok:function(data){//请求成功的回调
alert(data);
},
fnerror:function(data){//请求失败的回调
alert(data);
}
});
个人知识有限,如有错误的地方,望指正,共同学习共同进步!
ajax温习的更多相关文章
- Ajax 简述
说到Ajax大家一定不陌生,但是真要具体说说它是什么?估计给出完整定义的人应该不多. W3C上给Ajax的具体定义为: AJAX = Asynchronous JavaScript and XML(异 ...
- 从头开始一步一步实现EF6+Autofac+MVC5+Bootstarp极简的实现前后台ajax表格展示及分页实现
本来是想试着做一个简单OA项目玩玩的,真是不做不知道,一做吓死人,原来以为很简单的事情,但是做起来不是忘这就是忘那的,有的技术还得重新温习.所以还是得记录.免得哪天电脑挂了,就全没有了. 开始是看了园 ...
- 框架基础:ajax设计方案(一)---集成核心请求
报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉 ...
- 前端通信:ajax设计方案(一)---集成核心请求
报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉 ...
- AJAX 相关笔记
AJAX (Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)). 平时工作中使用ajax的频率挺高的,这里整理了一些ajax相关的小知识,后续 ...
- jQuery之ajax实现篇
jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...
- Ajax及跨域
概念 Ajax Ajax,Asynchronous JavaScript and XML,字面意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术. 用于异步地去获 ...
- 前端框架 EasyUI (0) 重新温习(序言)
几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
随机推荐
- 采用formdata做跨域的、无刷新、带进度条的文件上传
以前做无刷新上传,都要用iframe,如果想有进度条,就千难万难,不得不用flash等插件来实现. 现在HTML5终于普及了,筒子们不用再那么痛苦了. 所有这一切都变得异常简单!! 不信?且看如下代码 ...
- 单片机中断的IE和IP寄存器(摘抄)
收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 一.中断允许寄存器IE CPU对中断源的开放或中断屏蔽的控制是通过中断允许寄存器IE设置的,IE既可按字节地址寻址(其字节地址为A8 ...
- JAVA学习<三>
1.Java中运算符的优先级: 2.条件语句If: 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的. public class Hello ...
- mysql学习(二)
(1)存储过程:存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理: (2)存储过程优点:增强SQL语句的功能和灵活性,实现较快的执行速度,减少网络流量: (3)存储过程结构 ...
- 【译】RabbitMQ:"Hello World"
简介 RabbitMQ是一个消息代理.从本质上讲,它从消息生产者处接收消息,然后传递给消息的消费者.它在消息的生产者和消费者之间根据你指定的规则对消息进行路由.缓存和持久化. RabbitMQ通常使用 ...
- css控制页面打印(分页、屏蔽不需要打印的对象)
样式: <style media="print"> .Noprint { DISPLAY: none;} .PageNext { ...
- Lua.LearningLua.7-userdata
Learning Lua: 7 - userdata 1. Userdata basic "There are eight basic types in Lua: nil, boolean, ...
- 第三章 深入 ZAB 协议
上一节介绍了ZAB协议的内容,本节将从系统模型.问题描述.算法描述和运行分析四方面来深入了解 ZAB 协议. 系统模型 在一个由一组进程 n ={P1,P2,...Pn}组成的分布式系统中,每一个进程 ...
- OSIC Performance Bot
https://github.com/lbragstad/keystone-performance
- C#保存Base64格式图片
.前端页面代码 /** * 通过图片本地路径获取图片真实大小,并进行压缩 */ function getLocalRealSize(path, callback) { var img = new Im ...