ajax 传数组参数 并下载zip文件 兼容ie

时间: 2023-05-24 17:03:05 浏览: 54
A:要在ajax请求中传递数组参数并下载zip文件,可以像下面这样进行操作: ```javascript // 创建一个XMLHttpRequest对象 var xhr = new XMLHttpRequest(); // 指定请求方法和URL xhr.open('POST', 'download.php'); // 设置请求头:Content-Type为application/x-www-form-urlencoded xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 定义响应类型为二进制数据 xhr.responseType = 'blob'; // 构建传递的参数对象 var param = { arr: [1, 2, 3, 4, 5] }; // 将参数对象序列化成字符串 var data = 'param=' + encodeURIComponent(JSON.stringify(param)); // 发送ajax请求 xhr.send(data); // 请求完成后的回调函数 xhr.onload = function () { if (xhr.status === 200) { // 获取响应数据 var blob = xhr.response; // 创建一个a标签,设置下载属性并添加到文档中 var a = document.createElement('a'); a.style.display = 'none'; a.href = URL.createObjectURL(blob); a.download = 'filename.zip'; document.body.appendChild(a); // 模拟点击a标签进行下载 a.click(); // 移除a标签 document.body.removeChild(a); } }; // 兼容ie方法 if (window.navigator.msSaveOrOpenBlob) { xhr.onreadystatechange = function () { if (xhr.readyState === 4) { var blob = new Blob([xhr.response], { type: 'application/octet-stream' }); window.navigator.msSaveOrOpenBlob(blob, 'filename.zip'); } }; } ``` 需要注意的是,对于兼容IE的情况,需要在readystatechange事件中判断xhr.readyState是否为4,以确保请求已经完成。另外,由于IE不支持responseType属性,所以需要使用Blob对象来构建响应数据,然后调用window.navigator.msSaveOrOpenBlob方法来触发下载。

相关推荐

首先,你需要在前端使用ajax向后端发送请求,并在请求中设置responseType为blob,以便获取二进制流数据。同时,你需要在后端将excel文件转换成二进制流数据并返回给前端。 以下是一个使用jQuery的前端示例代码: javascript $.ajax({ url: 'your-backend-url', method: 'POST', responseType: 'blob', // 设置返回数据类型为二进制流 success: function(data) { // 创建一个a标签,将二进制流数据转换为URL,并设置下载属性 var a = document.createElement('a'); var url = window.URL.createObjectURL(data); a.href = url; a.download = 'file.xls'; // 将a标签添加到文档中,并自动触发点击事件下载文件 document.body.appendChild(a); a.click(); // 下载完成后,释放URL对象 window.URL.revokeObjectURL(url); } }); 在后端,你可以使用EPPlus或NPOI等库来将Excel文件转换为二进制流数据,并将其作为响应返回给前端。以下是一个使用EPPlus的后端示例代码: csharp using OfficeOpenXml; // ... [HttpPost] public IActionResult DownloadExcel() { // 读取Excel文件 var fileInfo = new FileInfo("path/to/file.xlsx"); using (var package = new ExcelPackage(fileInfo)) { // 获取工作表 var worksheet = package.Workbook.Worksheets[0]; // 将工作表转换为二进制数据 var data = worksheet.ConvertToBinary(); // 返回二进制数据 return File(data, "application/vnd.ms-excel", "file.xls"); } } 注意,以上代码仅供参考,具体实现可能会因为框架和库的不同而有所不同。
你可以使用第三方库 SheetJS 来实现将数组下载成 xlsx 文件的功能。具体步骤如下: 1. 引入 SheetJS 库 在 HTML 文件中,你需要引入 SheetJS 库。你可以从官方网站下载这个库,或者使用 CDN。例如: html <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.1/xlsx.full.min.js"></script> 2. 创建工作簿对象和工作表对象 你需要使用 SheetJS 库中的 Workbook 和 Worksheet 对象来创建一个工作簿和一个工作表。例如: javascript var wb = XLSX.utils.book_new(); var ws = XLSX.utils.json_to_sheet(data); // 这里的 data 是你要下载的数组 在上面的示例中,我们创建了一个名为 wb 的工作簿对象和一个名为 ws 的工作表对象,并使用 XLSX.utils.json_to_sheet 方法将数组 data 转换为工作表对象。 3. 将工作表添加到工作簿中 你需要使用 XLSX.utils.book_append_sheet 方法将工作表添加到工作簿中。例如: javascript XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); // 将工作表添加到工作簿中,工作表名称为 "Sheet1" 在上面的示例中,我们将工作表对象 ws 添加到工作簿对象 wb 中,并将工作表的名称设置为 "Sheet1"。 4. 将工作簿对象转换为二进制数据 你需要使用 XLSX.write 方法将工作簿对象转换为二进制数据。例如: javascript var wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' }); // 将工作簿对象转换为二进制数据 在上面的示例中,我们使用 XLSX.write 方法将工作簿对象 wb 转换为二进制数据,并将转换后的数据存储在变量 wbout 中。 5. 将二进制数据下载成 xlsx 文件 你可以使用以下代码将二进制数据下载成 xlsx 文件: javascript function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xFF; } return buf; } var fileName = "data.xlsx"; // 下载文件的名称 var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, fileName); } else { var link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = fileName; link.click(); } 在上面的代码中,我们定义了一个名为 s2ab 的函数,用于将字符串转换为 ArrayBuffer。然后,我们使用 Blob 对象将 ArrayBuffer 转换为二进制数据,并将二进制数据设置为下载链接的 href 属性。最后,我们创建一个链接元素,并将其 download 属性设置为要下载的文件名称,然后模拟点击链接来触发下载操作。 完整的示例代码如下: html <button onclick="downloadArray()">Download</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.1/xlsx.full.min.js"></script> <script> function downloadArray() { var data = [ { Name: "John", Age: 28, City: "New York" }, { Name: "Peter", Age: 35, City: "Paris" }, { Name: "Sarah", Age: 42, City: "London" } ]; var wb = XLSX.utils.book_new(); var ws = XLSX.utils.json_to_sheet(data); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); var wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' }); function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xFF; } return buf; } var fileName = "data.xlsx"; var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, fileName); } else { var link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = fileName; link.click(); } } </script>
引用和提供了使用ajax下载文件的示例代码。根据这些示例,您可以使用jQuery的ajax方法来实现文件下载功能。在ajax请求的成功回调函数中,您需要创建一个Blob对象来保存返回的数据,并将其转换为URL,然后创建一个a标签来触发下载。以下是一个使用jQuery的ajax方法下载文件的示例代码: javascript $.ajax({ type: "GET", url: "/download", data: { description: "test", logId: 123 }, success: function(data) { var blob = new Blob([data]); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = "file.zip"; link.click(); } }); 在这个例子中,通过GET请求从服务器获取文件数据,并将数据保存到Blob对象中。然后,创建一个a标签,设置其href属性为Blob对象的URL,设置download属性为要保存的文件名,最后触发a标签的click事件来下载文件。 另外,引用也提供了使用ajax下载文件的示例,通过设置window.location.href为文件的URL来实现文件下载。这种方法适用于直接将文件URL返回给浏览器进行下载。 综上所述,您可以根据您的需求选择适合的方法来使用jQuery的ajax方法下载文件。123 #### 引用[.reference_title] - *1* [jquery ajax post请求下载文件](https://blog.csdn.net/WMW_wmw/article/details/107719577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jQuery教程分享通过ajax下载文件](https://blog.csdn.net/weixin_33892912/article/details/114533443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jquery ajax下载 文件 思路](https://blog.csdn.net/yt1037921169/article/details/53085225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
对于Spring MVC和AJAX文件上传下载,你可以按照以下步骤操作: 文件上传: 1. 创建一个包含文件上传表单的HTML页面。 2. 创建一个Spring MVC控制器,用于处理文件上传的请求。 3. 在控制器中,使用@RequestMapping注解来映射文件上传的URL,并使用@RequestParam注解来接收文件。 4. 在处理方法中,使用MultipartFile参数来接收上传的文件,并使用transferTo()方法将文件保存到指定位置。 文件下载: 1. 创建一个Spring MVC控制器,用于处理文件下载的请求。 2. 在控制器中,使用@RequestMapping注解来映射文件下载的URL。 3. 在处理方法中,使用@PathVariable注解来接收文件名参数。 4. 使用ServletContext对象获取文件路径,并创建一个File对象。 5. 使用ResponseEntity类设置下载响应的头部信息和内容。 通过AJAX实现文件上传和下载: 1. 使用JavaScript创建一个AJAX请求对象。 2. 使用FormData对象将文件添加到请求中。 3. 发送AJAX请求到Spring MVC控制器的URL,并设置请求方法为POST。 4. 在Spring MVC控制器中,使用MultipartFile参数接收文件,并处理文件上传的逻辑。 5. 在返回的响应中,可以包含上传成功或失败的消息。 注意:在Spring配置文件中,需要配置multipart解析器来支持文件上传。 以上是实现Spring MVC和AJAX文件上传下载的一般步骤,你可以根据具体需求进行适当的调整和扩展。希望对你有所帮助!如果还有其他问题,请随时提问。

最新推荐

JS使用ajax从xml文件动态获取数据显示的方法

本文实例讲述了JS使用ajax从xml文件动态获取数据显示的方法。分享给大家供大家参考。具体分析如下: 下面的JS代码通过ajax检索xml文件的内容动态展示到网页,真个页面无刷新 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;...

jquery ajax 向后台传递数组参数示例

需求: 在JS中向后台传递数组参数 分析: JS中的数组是弱类型的可以放任何类型(对象、基本类型),但是如果数组中放的是对象类型,传递到后台是显示的只能是对象字符串–[object Object],原因如下: 在后台接收的...

使用Ajax生成的Excel文件并下载的实例

本篇文章主要介绍了使用Ajax生成的Excel文件并下載的实例,具有一定的参考价值,有需要的可以了解一下。

ajax获得json对象数组 循环输出数据的方法

今天小编就为大家分享一篇ajax获得json对象数组 循环输出数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

JavaScript读二进制文件并用ajax传输二进制流的方法

主要介绍了JavaScript读二进制文件并用ajax传输二进制流的方法的相关资料,需要的朋友可以参考下

数据结构1800试题.pdf

你还在苦苦寻找数据结构的题目吗?这里刚刚上传了一份数据结构共1800道试题,轻松解决期末挂科的难题。不信?你下载看看,这里是纯题目,你下载了再来私信我答案。按数据结构教材分章节,每一章节都有选择题、或有判断题、填空题、算法设计题及应用题,题型丰富多样,共五种类型题目。本学期已过去一半,相信你数据结构叶已经学得差不多了,是时候拿题来练练手了,如果你考研,更需要这份1800道题来巩固自己的基础及攻克重点难点。现在下载,不早不晚,越往后拖,越到后面,你身边的人就越卷,甚至卷得达到你无法想象的程度。我也是曾经遇到过这样的人,学习,练题,就要趁现在,不然到时你都不知道要刷数据结构题好还是高数、工数、大英,或是算法题?学完理论要及时巩固知识内容才是王道!记住!!!下载了来要答案(v:zywcv1220)。

语义Web动态搜索引擎:解决语义Web端点和数据集更新困境

跟踪:PROFILES数据搜索:在网络上分析和搜索数据WWW 2018,2018年4月23日至27日,法国里昂1497语义Web检索与分析引擎Semih Yumusak†KTO Karatay大学,土耳其semih. karatay.edu.trAI 4 BDGmbH,瑞士s. ai4bd.comHalifeKodazSelcukUniversity科尼亚,土耳其hkodaz@selcuk.edu.tr安德烈亚斯·卡米拉里斯荷兰特文特大学utwente.nl计算机科学系a.kamilaris@www.example.com埃利夫·尤萨尔KTO KaratayUniversity科尼亚,土耳其elif. ogrenci.karatay.edu.tr土耳其安卡拉edogdu@cankaya.edu.tr埃尔多安·多杜·坎卡亚大学里扎·埃姆雷·阿拉斯KTO KaratayUniversity科尼亚,土耳其riza.emre.aras@ogrenci.karatay.edu.tr摘要语义Web促进了Web上的通用数据格式和交换协议,以实现系统和机器之间更好的互操作性。 虽然语义Web技术被用来语义注释数据和资源,更容易重用,这些数据源的特设发现仍然是一个悬 而 未 决 的 问 题 。 流 行 的 语 义 Web �

matlabmin()

### 回答1: `min()`函数是MATLAB中的一个内置函数,用于计算矩阵或向量中的最小值。当`min()`函数接收一个向量作为输入时,它返回该向量中的最小值。例如: ``` a = [1, 2, 3, 4, 0]; min_a = min(a); % min_a = 0 ``` 当`min()`函数接收一个矩阵作为输入时,它可以按行或列计算每个元素的最小值。例如: ``` A = [1, 2, 3; 4, 0, 6; 7, 8, 9]; min_A_row = min(A, [], 2); % min_A_row = [1;0;7] min_A_col = min(A, [],

TFT屏幕-ILI9486数据手册带命令标签版.pdf

ILI9486手册 官方手册 ILI9486 is a 262,144-color single-chip SoC driver for a-Si TFT liquid crystal display with resolution of 320RGBx480 dots, comprising a 960-channel source driver, a 480-channel gate driver, 345,600bytes GRAM for graphic data of 320RGBx480 dots, and power supply circuit. The ILI9486 supports parallel CPU 8-/9-/16-/18-bit data bus interface and 3-/4-line serial peripheral interfaces (SPI). The ILI9486 is also compliant with RGB (16-/18-bit) data bus for video image display. For high speed serial interface, the ILI9486 also provides one data and clock lane and supports up to 500Mbps on MIPI DSI link. And also support MDDI interface.

数据搜索和分析

跟踪:PROFILES数据搜索:在网络上分析和搜索数据WWW 2018,2018年4月23日至27日,法国里昂1485表征数据集搜索查询艾米莉亚·卡普尔扎克英国南安普敦大学开放数据研究所emilia. theodi.org珍妮·坦尼森英国伦敦开放数据研究所jeni@theodi.org摘要在Web上生成和发布的数据量正在迅速增加,但在Web上搜索结构化数据仍然存在挑战。在本文中,我们探索数据集搜索分析查询专门为这项工作产生的通过众包-ING实验,并比较它们的搜索日志分析查询的数据门户网站。搜索环境的变化以及我们给人们的任务改变了生成的查询。 我们发现,在我们的实验中发出的查询比数据门户上的数据集的搜索查询要长得多。 它们还包含了七倍以上的地理空间和时间信息的提及,并且更有可能被结构化为问题。这些见解可用于根据数据集搜索的特定信息需求和特征关键词数据集搜索,�