原生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 相关文章推荐
JS 两日期相减,获得天数的小例子(兼容IE,FF)
Jul 01 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
判断window.onload是否多次使用的方法
Sep 21 Javascript
JS如何实现文本框随文本的长度而增长
Jul 30 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
js实现的后台左侧管理菜单代码
Sep 11 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
JS+CSS3制作炫酷的弹窗效果
Nov 08 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
ionic中的$ionicPlatform.ready事件中的通用设置
Jun 11 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
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
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
深入了解Python enumerate和zip
2020/07/16 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
《九色鹿》教学反思
2014/02/27 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
2014年教师节寄语
2014/08/11 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang