类似jQuery的原生JS封装的ajax方法
一,前言:
前文,我们介绍了ajax的原理和核心内容,主要讲的是ajax从前端到后端的数据传递的整个过程。
真正的核心就是这段代码:
var xhr = new XMLHTTPRequest();
xhr.open("method", "url", "async");
xhr.send(null);
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
if(xhr.status == 200){
console.log(xhr.responseText)
}
}
}
一个对象(XMLHTTPRequest对象)、
两个方法(包括open("method", "url", "async")方法和send(content)方法)、
三个属性(readystate表示当前请求状态,status表示http请求状态码,responseText表示服务器反馈内容),
当然还有一个事件——onreadystatechange ,是在readystate状态改变时触发的事件。具体的内容请点击链接Ajax工作原理。
二,正文:
先来看看jQuery中Ajax方法的使用:
$.ajax({
type: "GET", //访问服务器的方式,GET/POST
url: "test.json", //url表示访问的服务器地址
data: {username: "",
content: ""}, //data表示传递到后台的数据,使用键值对形式传递
async: true, //true表示异步,false表示同步
success: function(data){
console.log(data)
},
error: function(err){
console.log(err)
}
});
那么我们想要封装成类似JQuery的形式,供调用,怎么办呢?
function $Ajax(opt){
opt = opt || {};
opt.type = opt.type || "post";
opt.url = opt.url || "";
opt.async = opt.async || true;
opt.data = opt.data || null;
opt.success = opt.success || function(){};
opt.error = opt.error || function(){};
var xhr = new XMLHTTPRequest();
var params = {};
for(var key in opt.data){
params.push(key + "=" + opt.data[key]);
}
var sendData = params.join("&");
if(opt.type.toUpperCase() == "GET"){
xhr.open(opt.type, opt.url + "?" + sendData, opt.async);
xhr.send(null);
}else{
xhr.open(opt.type, opt.url, opt.async);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
xhr.send(sendData);
}
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
if(xhr.status == 200){
opt.success && opt.success(xhr.responseText);
}else{
opt.error && xhr.error(xhr.status);
}
}
}
}
已经封装好了,接下来就是调用了,就像jQuery那样使用就行:
$Ajax({
type: "GET",
url: "test.json",
data: {username: "", content: ""},
async: true,
success: function(responseText){
console.log(responseText)
},
error: function(status){
console.log(status)
}
});
二,结语:
已经很晚了,没有进行测试,也没有详细进行注释,有时间再完善吧。
详细看这一篇:Ajax工作原理和原生JS的ajax封装
类似jQuery的原生JS封装的ajax方法的更多相关文章
- 用jQuery基于原生js封装的轮播
我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...
- 使用原生JS封装一个ajax
function ajax(data){ //第一步,创建XHR对象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpReque ...
- 原生JS封装ajax方法
http://blog.sucaijiayuan.com/article/89 jquery框架的ajax方法固然好用,但是假如某天我们的项目不能引入jquery或项目需求很简单,没有很多交互功能,只 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 通过游戏认识 --- JQuery与原生JS的差异
前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...
- ThinkPHP 中使用 IS_AJAX 判断原生 JS 中的 Ajax 出现问题
问题: 在 ThinkPHP 中使用原生 js 发起 Ajax 请求的时候.在控制器无法使用 IS_AJAX 进行判断.而使用 jQuery 中的 ajax 是没有问题的. 在ThinkPHP中.有一 ...
- 原生js封装十字参考线插件(一)
需求来源: 拓扑图之机房平面图,显示机房长宽比例尺,房间内标注各种设备间距不易实现,特在机房平面图上层加一个十字参考线 横竖两条线垂直,在鼠标指针处交叉,显示鼠标指针坐标(相对机房平面图的坐标,不是相 ...
- JavaWeb_Ajax通过JQuery和原生js异步传输数据
菜鸟教程 传送门 AJAX 优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 XMLHttpRequest 对象 传送门 (一) [JQuery]定时发送ajax请求 (二) ...
- 原生JS封装简单动画效果
原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...
随机推荐
- Python学习系列(九)(IO与异常处理)
Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Pytho ...
- Eclipse与IDEA快捷键对比
from:http://blog.csdn.net/dc_726/article/details/9531281 花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了 ...
- java 类加载器体系结构
- python中高阶函数学习笔记
什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...
- Js、jquery学习笔记
end() 方法 重新定位到上次操作的元素,一般与siblings()一起使用,操作其兄弟元素.如:$(this).addClass("highlight").children(& ...
- Unit02: 参数值注入 、 基于注解的组件扫描
Unit02: 参数值注入 . 基于注解的组件扫描 (4)IOC (Inversion Of Controll 控制反转) 什么是IOC? 对象之间的依赖关系由容器来建立. 什么是DI? (Depen ...
- linux下踢出已登录用户
通过xshell登录到linux,看到如下所示,有3个用户,但是前面两个不知在哪登录的了,那就踢出吧. 先确认一下自己是哪个 顺便注意一下“whoami”和“who am i”的不同 然后踢出前面两个 ...
- Kossel的一种滑块位置计算方法
做了一个小激光雕刻机之后,研究了一下这款3D打印机的结构和工作原理,一下就对这个运动过程很感兴趣,这三个杆是怎么联动使得喷头保持在一个平面上运动呢?打算先做一个架构,然后把激光器放在上面不是可以方便雕 ...
- Management
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 窗口点击模拟a
[问题描述] 在计算机屏幕上,有N 个窗口.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容.当你用鼠标点击屏幕上一个点的时候,若其在窗口 ...