原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)


Posted in Javascript onJune 21, 2016

由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法。

jQuery的ajax普通封装

var ajaxFn = function(uri, data, cb) {
$.ajax({
url: uri,
type: 'POST',
dataType: 'json',
data: data,
})
.done(cb)
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}

原生ajax封装,设置header,传json

var ajaxHdFn = function(uri, data, cb) {
var getXmlHttpRequest = function() {
if (window.XMLHttpRequest) {
//主流浏览器提供了XMLHttpRequest对象
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
//低版本的IE浏览器没有提供XMLHttpRequest对象
//所以必须使用IE浏览器的特定实现ActiveXObject
return new ActiveXObject("Microsoft.XMLHttpRequest");
}
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
//获取成功后执行操作
//数据在xhr.responseText
var resJson = JSON.parse(xhr.responseText)
cb(resJson);
}
};
xhr.open("post", uri, true);
xhr.setRequestHeader("DeviceCode", "56");
xhr.setRequestHeader("Source", "API");
xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
xhr.setRequestHeader("Content-Type", "application/json");
var dataStr = JSON.stringify(data);
xhr.send(dataStr);
}

原生ajax封装,设置header,传json

var ajaxStrFn = function(uri, data, cb) {
var getXmlHttpRequest = function() {
if (window.XMLHttpRequest) {
//主流浏览器提供了XMLHttpRequest对象
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
//低版本的IE浏览器没有提供XMLHttpRequest对象
//所以必须使用IE浏览器的特定实现ActiveXObject
return new ActiveXObject("Microsoft.XMLHttpRequest");
}
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
//获取成功后执行操作
//数据在xhr.responseText
var resJson = JSON.parse(xhr.responseText)
cb(resJson);
}
};
xhr.open("post", uri, true);
xhr.setRequestHeader("DeviceCode", "56");
xhr.setRequestHeader("Source", "API");
xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
var dataStr = '';
for (var i in data) {
if (dataStr) {
dataStr += '&';
}
dataStr += i + '=' + data[i];
}
xhr.send(dataStr);
}

原生ajax封装,设置header,传上传excel文件,提交表单

var ajaxFormFn = function(uri, formObj, cb) {
console.log('formObj---', formObj);
var getXmlHttpRequest = function() {
if (window.XMLHttpRequest) {
//主流浏览器提供了XMLHttpRequest对象
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
//低版本的IE浏览器没有提供XMLHttpRequest对象
//所以必须使用IE浏览器的特定实现ActiveXObject
return new ActiveXObject("Microsoft.XMLHttpRequest");
}
};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
//获取成功后执行操作
//数据在xhr.responseText
var resJson = JSON.parse(xhr.responseText)
cb(resJson);
}
};
xhr.open("post", uri, true);
xhr.setRequestHeader("DeviceCode", "56");
xhr.setRequestHeader("Source", "API");
xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
xhr.onload = function() {
console.log("上传完成!");
};
xhr.send(formObj);
}

导入的实现部分是后端的事情。

我们这里需要提交一个excel文件,使用ajax。

并且需要设置ajax的头信息。所以我们不使用封装好的插件。用原生js来封装一个ajaxFormFn() 方法。

这里用到两个对象:

第一个对象:FormData

第二个对象:XMLHttpRequest

目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 FormData 对象,还在用IE6 ? 只能仰天长叹....

有了这两个对象,我们可以真正的实现Ajax方式上传文件。

以上所述是小编给大家介绍的原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript DOM学习第四章 getElementByTagNames
Feb 19 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 Javascript
jquery实现显示已选用户
Jul 21 Javascript
jquery实现文本框textarea自适应高度
Mar 09 Javascript
关于Vue.js一些问题和思考学习笔记(1)
Dec 02 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
webpack构建的详细流程探底
Jan 08 Javascript
详解vue 单页应用(spa)前端路由实现原理
Apr 04 Javascript
Vue父子之间值传递的实例教程
Jul 02 Javascript
React实现动效弹窗组件
Jun 21 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 #Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 #Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 #Javascript
纯JS前端实现分页代码
Jun 21 #Javascript
jQuery AJAX timeout 超时问题详解
Jun 21 #Javascript
jQuery代码性能优化的10种方法
Jun 21 #Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 #Javascript
You might like
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
PHP循环结构实例讲解
2014/02/10 PHP
PHP合并静态文件详解
2014/11/14 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
Python subprocess模块学习总结
2014/03/13 Python
Python中的闭包实例详解
2014/08/29 Python
使用python实现接口的方法
2017/07/07 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Python创建字典的八种方式
2019/02/27 Python
python之mock模块基本使用方法详解
2019/06/27 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
对python中各个response的使用说明
2020/03/28 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
银行个人求职自荐信范文
2013/12/16 职场文书
单身联谊活动方案
2014/01/29 职场文书
师德学习感言
2014/01/31 职场文书
洗发水广告词
2014/03/13 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
SQL Server Agent 服务无法启动
2022/04/20 SQL Server
Java获取字符串编码格式实现思路
2022/09/23 Java/Android