原生ajax的post方法,原生js实现ajax及get post方法
ajax原生实现,含 post与get方法。原码如下:
/*
* ajax
* type === GET: data格式 name=baukh&age=29
* type === POST: data格式 { name: 'baukh', age:29 }
* 与 jquery 不同的是,[success, error, complete]返回的第二个参数, 并不是返回错误信息, 而是错误码
* */
var extend = require('./extend');
var utilities = require('./utilities');
function ajax(options) {
var defaults = {
url: null,// 请求地址
type: 'GET',// 请求类型
data: null,// 传递数据
headers: {},// 请求头信息
async: true,// 是否异步执行
beforeSend: utilities.noop,// 请求发送前执行事件
complete: utilities.noop,// 请求发送后执行事件
success: utilities.noop,// 请求成功后执行事件
error: utilities.noop// 请求失败后执行事件
};
options = extend(defaults, options);
if (!options.url) {
utilities.error('jTool ajax: url不能为空');
return;
}
var xhr = new XMLHttpRequest();
var formData = '';
if (utilities.type(options.data) === 'object') {
utilities.each(options.data, function (key, value) {
if(formData !== '') {
formData += '&';
}
formData += key + '=' + value;
});
}else {
formData = options.data;
}
if(options.type === 'GET' && formData) {
options.url = options.url + (options.url.indexOf('?') === -1 ? '?' : '&') + formData;
formData = null;
}
xhr.open(options.type, options.url, options.async);
for (var key in options.headers) {
xhr.setRequestHeader(key, options.headers[key]);
}
// xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// 执行发送前事件
options.beforeSend(xhr);
// 监听onload并执行完成事件
xhr.onload = function() {
// jquery complete(XHR, TS)
options.complete(xhr, xhr.status);
};
// 监听onreadystatechange并执行成功失败事件
xhr.onreadystatechange = function() {
if (xhr.readyState !== 4) {
return;
}
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
// jquery success(XHR, TS)
options.success(xhr.response, xhr.status);
} else {
// jquery error(XHR, TS, statusText)
options.error(xhr, xhr.status, xhr.statusText);
}
};
xhr.send(formData);
}
function post(url, data, callback) {
ajax({ url: url, type: 'POST', data: data, success: callback });
}
function get(url, data, callback) {
ajax({ url: url, type: 'GET', data: data, success: callback });
}
module.exports = {
ajax: ajax,
post: post,
get: get
};
代码中调用了 extend与 utilities类,如果想了解更多,请关注jTool
《野生前端工程师》专辑中所有文章均为@拭目以待 原创,转载请注明出处。
原生ajax的post方法,原生js实现ajax及get post方法相关推荐
- ajax返回实体类字符串,js使用ajax传值给后台,后台返回字符串处理方法
之前使用js获取后台生成的JSON字符串,然后给select填充值,这次需要重新获取一次. 这里的目标是,在一个input输入框里,输入一个用户名,判断是否为空,是否不存在,如果存在返回几个字段给前台 ...
- html php view调用controller的方法,解决JS无法调用Controller问题的方法
解决JS无法调用Controller问题的方法 闲话少说.先看一下事故现场. 事故现场 现在我要做的就是通过JS去调用后台controller的方法,可以看到客户端用的是Jquery和Ajax,现在出 ...
- js给php赋值,JavaScript_javascript给span标签赋值的方法,js给span标签赋值的方法?一般 - phpStudy...
javascript给span标签赋值的方法 js给span标签赋值的方法?一般有两种方法: 第一种方法:输出html function s(){ document.getElementById(&q ...
- html5 datepicker使用方法,WdatePicker.js时间日期插件的使用方法
本文介绍了WdatePicker.js时间插件使用,分享给大家,具体如下: 引用: 在项目中引用"plugin-clander"文件夹. 在html中引用"WdatePi ...
- js 打散二维数组最简方法(JS数组降维的几种方法)
var arr=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16] ];1.arr=[].concat.apply([],arr);console.dir( ...
- java ajax 更改头像_为什么js通过ajax前端修改头像不能立刻生效?
项目中有一个上传头像的功能,每次上传成功后,,数据库里的路径已经更新到了,但是刷新后就变成之前的头像,必需重新登录系统,才能显示修改后的头像.现在要改成,修改后就立刻生效. var photoImg; ...
- js 获取当前网站域名的方法
上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...
- html 当前域名,js 获取当前网站域名的方法
上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...
- jquery 扩展ajax请求,jQuery如何管理、扩展AJAX请求
jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...
- php上js实现ajax请求,原生JS如何实现Ajax通过POST方式与PHP进行交互的方法
原生JS如何实现Ajax通过POST方式与PHP进行交互的方法 发布时间:2021-04-20 11:28:22 来源:亿速云 阅读:52 作者:小新 这篇文章将为大家详细讲解有关原生JS如何实现Aj ...
最新文章
- Fatal error:SQL Server 不存在或拒绝访问。
- java_web学习(8)会话与状态管
- php获取citypicker的值,城市选择city-picker
- html5设计图的状态栏标准高度,HTML5 canvas自适应手机屏幕宽高度大小
- 如何把a1的图纸变成a0_如何安装家用空开配电
- flatMap()与concatMap()与concatMapEager()– RxJava常见问题解答
- tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件
- 用Visual C++实现远程线程嵌入技术
- mvc模式 mysql做网页_SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)
- 让IE8按照IE7的模式解释网页-【一句话】
- c语言自定义double函数例子,C语言的那些事——sqrt()函数 跟 double型数据的“%lf”...
- 「13」朴素贝叶斯Python实战:计算打喷嚏的工人患上新冠肺炎的概率
- mysql 秀出两个相关联的表中满足条件的内容_深入挖掘MySQL底层数据结构
- 刀塔霸业android如何更新_战斗麻将!V社自走棋《刀塔霸业》APP端上线了
- List异常报错:list All elements are null
- 下载书籍的网址【汇总】
- CA(载波聚合)和MIMO
- 5G注册流程分级详解
- 关于Mac系统接完投影仪拔下来以后有黑框的问题解决办法
- 模拟/数字混合信号的电路板布局布线注意事项