ajax post下载文件/流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax post下载文件/流相关的知识,希望对你有一定的参考价值。
我现在有一个需求
表单form1,有很多个input,都是本文。我需要写一个js方法。来模拟提交这个表单,action="do.php",然后提交后弹出一个保存对话框,让用户进行下载,但是我发现我没法用ajax 来弹出这个保存对话框,按照网上高手说的用临时的一个form提交后来弹出保存对话框,我现在就是不知道该如何去编写这个临时的form。。
var data1 = $('#form1').serialize();
window.open("List.ashx?cmd=DaoChu&" + data1 + JSON.stringify(columns) + "&ckColums:" + liger.get("ck2").getValue());
我最先是用的window.open来做,但是现在data1的数据很大,这样做肯定不行了。。该成 ajax 就不能弹保存对话框
Form里面有你很多的input
其实只要在你Form里面隐藏一个iframe
<iframe name="downloadFrame" style="display: none;" frameborder="0"></iframe>
然后 提交表单 把target指向这个Iframe就行了
$("#formId").attr("action","下载的URL");
$("#formId").attr("target","downloadFrame");//iframe的名字
$("#formId").submit();
Ajax 即“Asynchronous javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。
Ajax 是一种用于创建快速动态网页的技术。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。[1]
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
该技术在 1998 年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软 Exchange Server,并且迅速地成为了 Internet Explorer 4.0 的一部分。部分观察家认为,Outlook Web Access 是第一个应用了 Ajax 技术的成功的商业应用程序,并成为包括Oddpost 的网络邮件产品在内的许多产品的领头羊。但是,2005 年初,许多事件使得 Ajax 被大众所接受。Google 在它著名的交互应用程序中使用了异步通讯,如Google、Google 地图、Google 搜索建议、Gmail等。Ajax 这个词由《Ajax: A New Approach to Web Applications》[2] 一文所创,该文的迅速传播加强了人们使用该项技术的意识。另外,对Mozilla/Gecko 的支持使得该技术走向成熟,变得更为易用。
Ajax 前景非常乐观,可以提高系统性能,优化用户界面。Ajax 现有直接框架 AjaxPro,可以引入 AjaxPro.2.dll 文件,可以直接在前台页面 JavaScript 调用后台页面的方法。但此框架与表单验证有冲突。另外微软也引入了 Ajax 组件,需要添加 AjaxControlToolkit.dll 文件,可以在控件列表中出现相关控件。
参考技术A <form action="" method="post" name="aa" target="_blank"></form><input type="button" onClick="a()">
<script>
// 用户单击 不会提示拦截弹出窗口
function a()
document.forms['aa'].submit();
</script>
在本页面 打开rar 等类型文件会自动提示下载的, 如果要自定义下载文件名字,那需要php 的文件
用上面这个把
这个可以在新窗口打开, 不能设置新窗口大小, 如果要实现新窗口大小可以用
$.ajax()
来模拟一个,原理: 用js 创建一个div 模拟新页面
$.ajax("url",
data:"提交参数",
dataType:"json", //xml html script jsonp
success:function(data, textStatus, jqXHR)
//操作,弹出层,模拟新页面操作
//data 可能是 xmlDoc, jsonObj, html, text, 等等...
//textStatus 返回状态
);
php 下载页面,
$file_name = "demo.txt";
$file_name_new = "demo2.txt"; //自定下载文件名称
if (!file_exists($file_dir.$file_name)) //检查文件是否存在
echo "文件找不到";
exit;
else
$file = fopen($file_dir . $file_name,"r"); // 打开文件
// 输入文件标签
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize($file_dir . $file_name));
header("Content-Disposition: attachment; filename=" . $file_name_new);
// 输出文件内容
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
exit();
参考技术B
Form里面有你很多的input
其实只要在你Form里面隐藏一个iframe
<iframe name="downloadFrame" style="display: none;" frameborder="0"></iframe>然后 提交表单 把target指向这个Iframe就行了
$("#formId").attr("action","下载的URL");$("#formId").attr("target","downloadFrame");//iframe的名字
$("#formId").submit();本回答被提问者采纳
Ajax请求导出Excel的问题
原文地址:http://yuwenlin.iteye.com/blog/2275289
1.Ajax请求导出Excel的问题描述:
前端发起Ajax请求get或post,后台使用Poi生成excel文件,最后用response输出excel文件流。整个调用过程都没有报任何错,excel文件也生成在本地,但浏览器没有弹出文件下载,毫无反应。
2.解决:
开始一直以为是浏览器兼容性,或后台输出文件流代码有问题,调了半天,也都一样,不报任何错。后来上网搜发现在类似的问题,Ajax导出excel没反应,网上有人说不能使用ajax,换成地址重定向location.href就行,一换还真好使。就是ajax请求的问题。
3.总结:
导出excel为什么不能用ajax请求?
因为导出excel,实际上是文件下载,后台需要往前端(浏览器)写文件流的。而Ajax请求获取数据都是“字符串”,整个交互传输用的都是字符串数据,它没法解析后台返回的文件流,但浏览器可以。
4.Ajax与Form表单提交的区别:
Ajax提交不会自动刷新页面,需要手动处理。
Form表单提交在数据提交后会刷新页面,如果是Post提交,点击刷新浏览器会提示 是否再次提交。
以上是关于ajax post下载文件/流的主要内容,如果未能解决你的问题,请参考以下文章
Vue 之 new Blob() 文件流下载文件不同文件类型的 type 值整理
Java实现文件流下载文件,浏览器无反应,后台无错误!如何解决?
Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )
Kotlin 协程Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )