原生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 相关文章推荐
Prototype使用指南之hash.js
Jan 10 Javascript
JS window.opener返回父页面的应用
Oct 24 Javascript
理解 JavaScript 预解析
Oct 25 Javascript
jQuery 获取浏览器所在的IP地址的小例子
Nov 08 Javascript
如何在MVC应用程序中使用Jquery
Nov 17 Javascript
Javascript之Date对象详解
Jun 07 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 Javascript
如何提高Dom访问速度
Jan 05 Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
JavaScript 事件捕获冒泡与捕获详情
Nov 11 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
JS event使用方法详解
2008/04/28 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
高三毕业典礼演讲稿
2014/05/13 职场文书
模具专业自荐信
2014/05/29 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers
Vue router配置与使用分析讲解
2022/12/24 Vue.js