jQuery MiniUI

 找回密码
 立即注册
查看: 7205|回复: 11
打印 上一主题 下一主题

Excel导出中使用了ajax无法自动跳转下载页 [复制链接]

Rank: 2

跳转到指定楼层
楼主
发表于 2014-5-13 11:46:54 |只看该作者 |倒序浏览
引文导出Excel时间比较长,所以 我需要添加一个 加载等待页面  直接用submit表单提交 无法知道什么时候加载完毕 ,所以我使用了 ajax 但是 无法自动跳到 下载页面
页面代码如下   
  1.   //提交表单数据
  2.     //var form = new mini.Form("#excelForm");
  3.     //$.ajax({
  4.     //    url: "..\\data\\export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder,
  5.     //    type: "post",
  6.     //    data: { columns: json },
  7.     //    success: function (text) {
  8.     //        stoploading();
  9.     //        window.location = window.location;

  10.     //    }
  11.     //});

  12.     //function loading() {
  13.     //    mini.mask({
  14.     //        el: document.body,
  15.     //        cls: 'mini-mask-loading',
  16.     //        html: '加载中...'
  17.     //    });
  18.     //}
  19.     //function stoploading() {
  20.     //    mini.unmask(document.body);
  21.     //}
复制代码
后台代码 已经接受数据 也返回了 。
看了一个帖子 说 ajax success 直接重定向下载地址就可以 到时 我的下载地址是http://localhost:16292/web/data/export.aspx?type=excel&searchtable=v_purch_mas 这种方式 又重新访问 export.aspx 只是重复了一次 没有任何效果



Rank: 8Rank: 8

沙发
发表于 2014-5-13 12:53:56 |只看该作者
你现在这样不是直接到后台就跳转了。。。
你后台运行完返回一段text,success里根据这个判断是不是执行完了,完了的话才跳转

Rank: 2

板凳
发表于 2014-5-13 14:06:38 |只看该作者
felt 发表于 2014-5-13 12:53
你现在这样不是直接到后台就跳转了。。。
你后台运行完返回一段text,success里根据这个判断是不是执行完了 ...

不是很明白 , location 那是是有问题 因为我不知道要跳转到哪里。 success那里 text 是已经拿到数据了。

Rank: 8Rank: 8

地板
发表于 2014-5-13 14:34:10 |只看该作者
star 发表于 2014-5-13 14:06
不是很明白 , location 那是是有问题 因为我不知道要跳转到哪里。 success那里 text 是已经拿到数据了。 ...

window.location.href="url"试试

Rank: 2

5#
发表于 2014-5-13 16:17:32 |只看该作者
felt 发表于 2014-5-13 14:34
window.location.href="url"试试

还是不可以    用submit就一点问题都没有 就是不能做 加载等待
  1. $("#excelForm").attr("action", "..\\data\\export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder);
  2.     var columns = grid.getBottomColumns();

  3.     function getColumns(columns) {
  4.         columns = columns.clone();
  5.         for (var i = columns.length - 1; i >= 0; i--) {
  6.             var column = columns[i];
  7.             if (!column.field) {
  8.                 columns.removeAt(i);
  9.             } else {
  10.                 var c = { header: column.header, field: column.field };
  11.                 columns[i] = c;
  12.             }
  13.         }
  14.         return columns;
  15.     }

  16.     var columns = getColumns(columns);
  17.     var json = mini.encode(columns);
  18.     document.getElementById("excelData").value = json;
  19.     var excelForm = document.getElementById("excelForm");
  20.     excelForm.submit();
复制代码

Rank: 8Rank: 8

6#
发表于 2014-5-13 16:51:14 |只看该作者
star 发表于 2014-5-13 16:17
还是不可以    用submit就一点问题都没有 就是不能做 加载等待

success里面执行页面跳转,不跳转?

Rank: 2

7#
发表于 2014-5-15 11:21:14 |只看该作者
factory 发表于 2014-5-13 16:51
success里面执行页面跳转,不跳转?

success里面是可以跳转 , 但是具体我不知道要跳转到哪里, 如果 我写
"../data/export.aspx?type=excel&searchtable=" + pageData.tableName + "&sortOrder=" + pageData.orderby;
这个地址是访问export.aspx(应该是生成excel的,不是很清楚),但是 这样我就不能把clumns 传进去 ,会出错,现在最关键的是 success如何获取 excel的 具体下载地址 (.xls 后缀),我直接跳转就可以了
全部代码都贴出来了
  1. function toExcel() {
  2.     //导出excel表传递参数tableName
  3.     loading();
  4.     var tableName = pageData.tableName;
  5.     var sortOrder = pageData.orderby;
  6.     //$("#excelForm").attr("action", "..\\data\\export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder);
  7.     var columns = grid.getBottomColumns();

  8.     function getColumns(columns) {
  9.         columns = columns.clone();
  10.         for (var i = columns.length - 1; i >= 0; i--) {
  11.             var column = columns[i];
  12.             if (!column.field) {
  13.                 columns.removeAt(i);
  14.             } else {
  15.                 var c = { header: column.header, field: column.field };
  16.                 columns[i] = c;
  17.             }
  18.         }
  19.         return columns;
  20.     }

  21.     var columns = getColumns(columns);
  22.     var json = mini.encode(columns);
  23.     document.getElementById("excelData").value = json;
  24.     var excelForm = document.getElementById("excelForm");
  25.     //excelForm.submit();
  26.     //提交表单数据
  27.     var form = new mini.Form("#excelForm");
  28.     $.ajax({
  29.         url: "../data/export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder,
  30.         type: "post",
  31.         data: { columns: json },
  32.         success: function (text) {
  33.             stoploading();
  34.             window.location.href = "../data/export.aspx?type=excel&searchtable=" + pageData.tableName + "&sortOrder=" + pageData.orderby;

  35.         }
  36.     });

  37.     function loading() {
  38.         mini.mask({
  39.             el: document.body,
  40.             cls: 'mini-mask-loading',
  41.             html: '加载中...'
  42.         });
  43.     }
  44.     function stoploading() {
  45.         mini.unmask(document.body);
  46.     }
  47. }


  48. function close(action) {
  49.     if (window.CloseOwnerWindow) return window.CloseOwnerWindow(action);
  50.     else window.close();
  51. }

  52. function refresh() {
  53.     grid.reload();
  54. }
复制代码

Rank: 2

8#
发表于 2014-5-15 11:22:06 |只看该作者
factory 发表于 2014-5-13 16:51
success里面执行页面跳转,不跳转?

success里面是可以跳转 , 但是具体我不知道要跳转到哪里, 如果 我写
"../data/export.aspx?type=excel&searchtable=" + pageData.tableName + "&sortOrder=" + pageData.orderby;
这个地址是访问export.aspx(应该是生成excel的,不是很清楚),但是 这样我就不能把clumns 传进去 ,会出错,现在最关键的是 success如何获取 excel的 具体下载地址 (.xls 后缀),我直接跳转就可以了
全部代码都贴出来了
  1. function toExcel() {
  2.     //导出excel表传递参数tableName
  3.     loading();
  4.     var tableName = pageData.tableName;
  5.     var sortOrder = pageData.orderby;
  6.     //$("#excelForm").attr("action", "..\\data\\export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder);
  7.     var columns = grid.getBottomColumns();

  8.     function getColumns(columns) {
  9.         columns = columns.clone();
  10.         for (var i = columns.length - 1; i >= 0; i--) {
  11.             var column = columns[i];
  12.             if (!column.field) {
  13.                 columns.removeAt(i);
  14.             } else {
  15.                 var c = { header: column.header, field: column.field };
  16.                 columns[i] = c;
  17.             }
  18.         }
  19.         return columns;
  20.     }

  21.     var columns = getColumns(columns);
  22.     var json = mini.encode(columns);
  23.     document.getElementById("excelData").value = json;
  24.     var excelForm = document.getElementById("excelForm");
  25.     //excelForm.submit();
  26.     //提交表单数据
  27.     var form = new mini.Form("#excelForm");
  28.     $.ajax({
  29.         url: "../data/export.aspx?type=excel&searchtable=" + tableName + "&sortOrder=" + sortOrder,
  30.         type: "post",
  31.         data: { columns: json },
  32.         success: function (text) {
  33.             stoploading();
  34.             window.location.href = "../data/export.aspx?type=excel&searchtable=" + pageData.tableName + "&sortOrder=" + pageData.orderby;

  35.         }
  36.     });

  37.     function loading() {
  38.         mini.mask({
  39.             el: document.body,
  40.             cls: 'mini-mask-loading',
  41.             html: '加载中...'
  42.         });
  43.     }
  44.     function stoploading() {
  45.         mini.unmask(document.body);
  46.     }
  47. }


  48. function close(action) {
  49.     if (window.CloseOwnerWindow) return window.CloseOwnerWindow(action);
  50.     else window.close();
  51. }

  52. function refresh() {
  53.     grid.reload();
  54. }
复制代码

Rank: 2

9#
发表于 2014-5-15 11:41:31 |只看该作者
factory 发表于 2014-5-13 16:51
success里面执行页面跳转,不跳转?

或者我问得简单一点 如果在生成excel过程中 做加载等待~~~

Rank: 8Rank: 8

10#
发表于 2014-5-15 14:20:56 |只看该作者
star 发表于 2014-5-15 11:41
或者我问得简单一点 如果在生成excel过程中 做加载等待~~~

你不是单纯跳转页面?  
ajax是无法做到这样的,必须用传统form提交
对于导出,其实就是下载一个文件,这样的话ajax是无法做到的

Archiver|普加软件

GMT+8, 2024-6-16 06:35 , Processed in 1.038683 second(s), 9 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部