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方法相关推荐

  1. ajax返回实体类字符串,js使用ajax传值给后台,后台返回字符串处理方法

    之前使用js获取后台生成的JSON字符串,然后给select填充值,这次需要重新获取一次. 这里的目标是,在一个input输入框里,输入一个用户名,判断是否为空,是否不存在,如果存在返回几个字段给前台 ...

  2. html php view调用controller的方法,解决JS无法调用Controller问题的方法

    解决JS无法调用Controller问题的方法 闲话少说.先看一下事故现场. 事故现场 现在我要做的就是通过JS去调用后台controller的方法,可以看到客户端用的是Jquery和Ajax,现在出 ...

  3. js给php赋值,JavaScript_javascript给span标签赋值的方法,js给span标签赋值的方法?一般 - phpStudy...

    javascript给span标签赋值的方法 js给span标签赋值的方法?一般有两种方法: 第一种方法:输出html function s(){ document.getElementById(&q ...

  4. html5 datepicker使用方法,WdatePicker.js时间日期插件的使用方法

    本文介绍了WdatePicker.js时间插件使用,分享给大家,具体如下: 引用: 在项目中引用"plugin-clander"文件夹. 在html中引用"WdatePi ...

  5. 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( ...

  6. java ajax 更改头像_为什么js通过ajax前端修改头像不能立刻生效?

    项目中有一个上传头像的功能,每次上传成功后,,数据库里的路径已经更新到了,但是刷新后就变成之前的头像,必需重新登录系统,才能显示修改后的头像.现在要改成,修改后就立刻生效. var photoImg; ...

  7. js 获取当前网站域名的方法

    上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...

  8. html 当前域名,js 获取当前网站域名的方法

    上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...

  9. jquery 扩展ajax请求,jQuery如何管理、扩展AJAX请求

    jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...

  10. php上js实现ajax请求,原生JS如何实现Ajax通过POST方式与PHP进行交互的方法

    原生JS如何实现Ajax通过POST方式与PHP进行交互的方法 发布时间:2021-04-20 11:28:22 来源:亿速云 阅读:52 作者:小新 这篇文章将为大家详细讲解有关原生JS如何实现Aj ...

最新文章

  1. Fatal error:SQL Server 不存在或拒绝访问。
  2. java_web学习(8)会话与状态管
  3. php获取citypicker的值,城市选择city-picker
  4. html5设计图的状态栏标准高度,HTML5 canvas自适应手机屏幕宽高度大小
  5. 如何把a1的图纸变成a0_如何安装家用空开配电
  6. flatMap()与concatMap()与concatMapEager()– RxJava常见问题解答
  7. tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件
  8. 用Visual C++实现远程线程嵌入技术
  9. mvc模式 mysql做网页_SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)
  10. 让IE8按照IE7的模式解释网页-【一句话】
  11. c语言自定义double函数例子,C语言的那些事——sqrt()函数 跟 double型数据的“%lf”...
  12. 「13」朴素贝叶斯Python实战:计算打喷嚏的工人患上新冠肺炎的概率
  13. mysql 秀出两个相关联的表中满足条件的内容_深入挖掘MySQL底层数据结构
  14. 刀塔霸业android如何更新_战斗麻将!V社自走棋《刀塔霸业》APP端上线了
  15. List异常报错:list All elements are null
  16. 下载书籍的网址【汇总】
  17. CA(载波聚合)和MIMO
  18. 5G注册流程分级详解
  19. 关于Mac系统接完投影仪拔下来以后有黑框的问题解决办法
  20. 模拟/数字混合信号的电路板布局布线注意事项

热门文章

  1. 快速开平方取倒数的算法
  2. TensorFlow下载与安装
  3. RAN adjusts schedule for 2nd wave of 5G specifications
  4. 服务器关于数据流转方式
  5. Kotlin的继承(二)
  6. docker搭建单节点mongodb
  7. Unity开发《一起来捉妖》教程 | 3.随机妖怪位置及旋转提示
  8. Azure Synapse Analytics简介第3部分:数据科学和商业智能
  9. 统一操作系统 UOS 龙芯版上线
  10. rust腐蚀深井_深井开采中的地压现象致因分析及措施_高光