原生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 相关文章推荐
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
Apr 01 Javascript
Mootools 1.2教程 事件处理
Sep 15 Javascript
JS 判断undefined的实现代码
Nov 26 Javascript
JavaScript编程开发中的五个实用小技巧
Jul 22 Javascript
javascript 树形导航菜单实例代码
Aug 13 Javascript
点击弹出层效果&弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
Dec 03 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
Oct 26 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
公众号SVG动画交互实战代码
May 31 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
WIFI万能钥匙密码查询接口实例
2015/09/28 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
python 连接sqlite及简单操作
2017/06/30 Python
Python编写一个优美的下载器
2018/04/15 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Django app配置多个数据库代码实例
2019/12/17 Python
浅谈Python 函数式编程
2020/06/20 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
七年级生物教学反思
2014/01/30 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
活动主持人开场白
2015/05/28 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书