类似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 ...
随机推荐
- minio 介绍
minio 兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言. Minio可以做为云存储的解决方案用来保存海 ...
- gitlab安装、配置与阿里云产品集成
https://www.ilanni.com/?p=12819 一.gitlab安装与部署 gitlab的安装可以分为源码安装和通过安装包进行安装,要是按照我以前的写作习惯的话,我也会把源码安装在本文 ...
- 1.JMeter===添加响应断言
断言即Lr中的检查点,我们在进行测试时,需要对每次请求测试的返回做检验 1.以百度做案例,添加线程组==添加HTTP请求==添加查看结果树 2.在HTTP请求下添加响应断言 注:模式匹配规则,比较常用 ...
- 运维命令:tcpdump
tcpdump命令 tcpdump 命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用 -w 选项将数据包保存到文件中,方便以后分析. 常用参数: -a:尝试将网络 ...
- oracle的时间
今天发现之前从oracle导出的数据时间格式很奇怪: "ACTIVETIME","ACTIVITYID" "2018-08-10 06:08:43&q ...
- 机器学习之代价函数(cost function)
代价函数(有的地方也叫损失函数,Loss Function)在机器学习中的每一种算法中都很重要,因为训练模型的过程就是优化代价函数的过程,代价函数对每个参数的偏导数就是梯度下降中提到的梯度,防止过拟合 ...
- String与StringBuffer效率的比较
String str = “”; for (int i=0; i<100; i++) str += “a”; 可是你知道在内存中会产生多少的垃圾出来吗?总共会有a.aa.aaa. aaa….,无 ...
- 算法题:求一个序列S中所有包含T的子序列(distinct sub sequence)
题: 给定一个序列S以及它的一个子序列T,求S的所有包含T的子序列.例: S = [1, 2, 3, 2, 4] T = [1, 2, 4] 则S的所有包含T的子序列为: [1, 2, 3, 2, 4 ...
- centos7 桥接配置
cd /etc/sysconfig/network-scripts/ 名字可能各不同,一般出现在第一个位置 vim ifcfg-ens33 然后重启 systemctl restart network ...
- Tomcat 8.5 架构分析
官方文档:Apache Tomcat 8 Architecture 以下分析的是 Version 8.5. Tomcat 组件关系图 根据 Architecture Overview 绘制: Serv ...