原生js封装ajax:传json,str,excel文件上传表单提交

由于项目中需要在提交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

 1 var ajaxHdFn = function(uri, data, cb) {
 2   var getXmlHttpRequest = function() {
 3     if (window.XMLHttpRequest) {
 4       //主流浏览器提供了XMLHttpRequest对象
 5       return new XMLHttpRequest();
 6     } else if (window.ActiveXObject) {
 7       //低版本的IE浏览器没有提供XMLHttpRequest对象
 8       //所以必须使用IE浏览器的特定实现ActiveXObject
 9       return new ActiveXObject("Microsoft.XMLHttpRequest");
10     }
11
12   };
13   var xhr = getXmlHttpRequest();
14   xhr.onreadystatechange = function() {
15     if (xhr.readyState === 4 && xhr.status === 200) {
16       //获取成功后执行操作
17       //数据在xhr.responseText
18       var resJson = JSON.parse(xhr.responseText)
19       cb(resJson);
20     }
21   };
22   xhr.open("post", uri, true);
23   xhr.setRequestHeader("DeviceCode", "56");
24   xhr.setRequestHeader("Source", "API");
25   xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
26
27   xhr.setRequestHeader("Content-Type", "application/json");
28   var dataStr = JSON.stringify(data);
29   xhr.send(dataStr);
30 }

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

 1 var ajaxStrFn = function(uri, data, cb) {
 2   var getXmlHttpRequest = function() {
 3     if (window.XMLHttpRequest) {
 4       //主流浏览器提供了XMLHttpRequest对象
 5       return new XMLHttpRequest();
 6     } else if (window.ActiveXObject) {
 7       //低版本的IE浏览器没有提供XMLHttpRequest对象
 8       //所以必须使用IE浏览器的特定实现ActiveXObject
 9       return new ActiveXObject("Microsoft.XMLHttpRequest");
10     }
11
12   };
13   var xhr = getXmlHttpRequest();
14   xhr.onreadystatechange = function() {
15     if (xhr.readyState === 4 && xhr.status === 200) {
16       //获取成功后执行操作
17       //数据在xhr.responseText
18       var resJson = JSON.parse(xhr.responseText)
19       cb(resJson);
20     }
21   };
22   xhr.open("post", uri, true);
23   xhr.setRequestHeader("DeviceCode", "56");
24   xhr.setRequestHeader("Source", "API");
25   xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
26
27   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
28   var dataStr = ‘‘;
29   for (var i in data) {
30     if (dataStr) {
31       dataStr += ‘&‘;
32     }
33     dataStr += i + ‘=‘ + data[i];
34   }
35   xhr.send(dataStr);
36 }

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

 1 var ajaxFormFn = function(uri, formObj, cb) {
 2   console.log(‘formObj---‘, formObj);
 3
 4   var getXmlHttpRequest = function() {
 5     if (window.XMLHttpRequest) {
 6       //主流浏览器提供了XMLHttpRequest对象
 7       return new XMLHttpRequest();
 8     } else if (window.ActiveXObject) {
 9       //低版本的IE浏览器没有提供XMLHttpRequest对象
10       //所以必须使用IE浏览器的特定实现ActiveXObject
11       return new ActiveXObject("Microsoft.XMLHttpRequest");
12     }
13
14   };
15   var xhr = getXmlHttpRequest();
16   xhr.onreadystatechange = function() {
17     if (xhr.readyState === 4 && xhr.status === 200) {
18       //获取成功后执行操作
19       //数据在xhr.responseText
20       var resJson = JSON.parse(xhr.responseText)
21       cb(resJson);
22     }
23   };
24   xhr.open("post", uri, true);
25   xhr.setRequestHeader("DeviceCode", "56");
26   xhr.setRequestHeader("Source", "API");
27   xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f");
28
29   xhr.onload = function() {
30     console.log("上传完成!");
31   };
32
33   xhr.send(formObj);
34 }

导入的实现部分是后端的事情。
我们这里需要提交一个excel文件,使用ajax。
并且需要设置ajax的头信息。所以我们不使用封装好的插件。用原生js来封装一个ajaxFormFn() 方法。

这里用到两个对象:
第一个对象:FormData
第二个对象:XMLHttpRequest

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

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

时间: 2024-08-08 01:06:46

原生js封装ajax:传json,str,excel文件上传表单提交的相关文章

原生JS封装AJAX

今天我们来说说利用原生JS封装AJAX. jquery框架的AJAX方法确实很好用,但有时候我们写的页面需要引入多个JS插件,不一定哪个插件就会和jquery发生冲突,导致jquery用不了了.或者页面比较简单,不需要加重浏览器的负担,这时我们自己封装一个AJAX就是一个很好的办法. //将数据转换成 a=1&b=2格式;function json2url(json){   var arr = [];   //加随机数防止缓存;   json.t = Math.random();   for(v

HTML C# ajax结合ashx处理程序实现文件上传

ajax结合ashx处理程序实现文件上传 一.ajaxFileUpload是一个异步上传文件的jQuery插件. ajaxFileUpload参数说明:(copy了别人的参数说明) 1.url  上传处理程序地址. 2,fileElementId  需要上传的文件域的ID,即<input type="file">的ID.3,secureuri 是否启用安全提交,默认为false. 4,dataType 服务器返回的数据类型.可以为xml,script,json,html.如

SpringMVC返回JSON数据以及文件上传、过滤静态资源

返回JSON数据 在如今前后端分离的趋势下,后端基本不需要再去关心前端页面的事情,只需要把数据处理好并通过相应的接口返回数据给前端即可.在SpringMVC中,我们可以通过@ResponseBody注解来返回JSON数据或者是XML数据. 这个注解的作用是将控制器方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,也就是HTTP响应的内容体,一般我们都是用来返回JSON数据,因为默认是按JSON格式进行转换的. 需要注意的是,在使用此注解之后不会再走视图解

【原创】AJAX上传文件,formdata表单提交问题

今天遇到一个特别神奇的问题,AJAX上传文件,formdata表单提交问题,后台显示无法获取上传文件. 排查许久发现是formdata.append();时,要先添加file,而后添加其他参数.方可正常工作. 可是却不知到底是和原因.去了火狐开发者社区也未能找到答案. 还望知道的大神赐教一二.

[SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 客户端文本文件或Excel文件导入与导出... 1 TEXT_CONVERT_XLS_TO_SAP. 1 ALSM_EXCEL_TO_INTERNAL_TABLE. 3 SAP_CONVERT_TO_XLS_FORMAT. 5 客户端文本文件或Excel文件导入与导出 TEXT_CONVERT_XLS_TO_SAP TEXT_CONVERT_XLS_TO_SAP函数可以将

[SAP ABAP开发技术总结]文本文件、Excel文件上传下传

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 20.22.1.      读取客户端Txt.Excel文件到内表:TEXT_CONVERT_XLS_TO_SAP TEXT_CONVERT_XLS_TO_SAP函数可以将本地的文本文件(列与列之间默认使用TAB键分开,但也可以指定)或真正的Excel文件上传到服务内表中,并且文件转换成内表中的数据是自动完成,不需要手动,这与ALSM_EXCEL_TO_INTERNAL_TABLE

原生JS封装Ajax插件(同域&amp;&amp;jsonp跨域)

抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正确的地方,还望指正^_^ 一.Ajax核心,创建XHR对象 Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一款引入XHR对象的浏览器,而IE5中的XHR对象是通过MSXML库中的一个ActiveX对象实现的,因此在IE中可能有3个版本,即MSXML2.XMLHttp.

原生JS封装ajax方法

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <title>Examples</title> 10 <script> 11 12 //将对象序列

Excel文件上传,解析,下载(一 文件上传,使用MultipartFile来实现)

文件上传我使用的是jquery的一个插件"ajaxfileupload.js",使用方式详见下面的一种方式,使用file类型的input,同时需要给button绑定事件,这边使用的"ajaxfileupload.js"当中定义的ajax请求,到后台. <div id="fileupload"> <input type="file" id="file" name="file&quo

vue+mongoose+node.js项目总结第一篇_图片文件上传

一.前言 项目演示:每个新用户登录之后会有个默认的头像,用户可以根据自己选择自己的头像图片进行更改. 二.主要内容 1.需求实现的思路分析. 第一步:用户点击按钮选择图片其实是间接触发input图片选择 第二步:input表单被监听change事件 第三步:选择图片,然后将图片用canvas画在预览框处 第四步:点击“确定按钮”,请求后端接口配合云存储,将图片上传到云存储上 第五步:利用云存储器中生成的图片url地址替换掉原来的地址 2.具体实现      2.1总体思路  2.2前台实现部分