前后端分离ajax接收文件流的实践

一般ajax,post请求不能实现的原因

开始的想法:在页面上用jQuery的$.post方法发送一个请求给服务器,然后服务器根据这个参数再生成相应的一个文件流返回给客户端。但是,在$.post方法的回调函数中,只能处理xml, json, script, or html类型,对返回的文件流却没办法弹出对话框让用户下载了。

另类实现方法

经过百度,看到了很多人采用隐藏form提交的方式,再用response来推就可以


function exportRecord() {
    var searchData = getData();
    var json  = {
        "sid":$.cookie('sid'),
        "searchJson":searchData
    };
    var form = $("<form>");
    form.attr('style', 'display:none');
    form.attr('target', '');
    form.attr('method', 'post'); //请求方式
    form.attr('action', IP+'exportRecord.do');//请求地址

    var input1 = $('<input>');//将你请求的数据模仿成一个input表单
    input1.attr('type', 'hidden');
    input1.attr('name', 'json');//该输入框的name
    input1.attr('value',JSON.stringify(json));//该输入框的值

    $('body').append(form);
    form.append(input1);
    
    form.submit();
    form.remove();

 }

这种方法发出的请求格式类似于username=username&password=password. 代码中的name就是请求中的key,代码中的value就是请求数据中的value

然后后台采用老办法,往response里写文件流,往前台推。

by:http://www.leasonlove.cn/


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值