日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ajax请求导出Excel的问题

發(fā)布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ajax请求导出Excel的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考:http://yuwenlin.iteye.com/blog/2275289

1.Ajax請求導(dǎo)出Excel的問題描述:

  前端發(fā)起Ajax請求get或post,后臺使用Poi生成excel文件,最后用response輸出excel文件流。整個調(diào)用過程都沒有報任何錯,excel文件也生成在本地,但瀏覽器沒有彈出文件下載,毫無反應(yīng)。

2.解決:

  開始一直以為是瀏覽器兼容性,或后臺輸出文件流代碼有問題,調(diào)了半天,也都一樣,不報任何錯。后來上網(wǎng)搜發(fā)現(xiàn)在類似的問題,Ajax導(dǎo)出excel沒反應(yīng),網(wǎng)上有人說不能使用ajax,換成地址重定向 window.location.href?就行,一換還真好使。

function() {var stime = $("#layerdate").val();var etime = $("#layerdate2").val();window.location.href = "${pageContext.request.contextPath}/user/export?stime="+stime+"&etime="+etime; }

  但是當(dāng)需要傳一個很大數(shù)據(jù)到后臺(window.location.href= actionUrl + "?" + data;),就會出問題了,當(dāng)然,當(dāng)數(shù)據(jù)量不大的時候,使用這種方式是極好的。導(dǎo)致這個問題的原因是各種瀏覽器對URL解析的長度限制是不同的。

  • Microsoft Internet Explorer (Browser):IE瀏覽器對URL的最大限制為2083個字符,如果超過這個數(shù)字,提交按鈕沒有任何反應(yīng)。
  • Firefox (Browser):對于Firefox瀏覽器URL的長度限制為65,536個字符
  • Safari (Browser):URL最大長度限制為 80,000個字符。
  • Opera (Browser):URL最大長度限制為190,000個字符。
  • Google (chrome):url最大長度限制為8182個字符

  解決方法就換成了使用隱藏form來執(zhí)行導(dǎo)出操作,如下:

<a href="javascript:void(0)" onclick="exportExcel()">導(dǎo)出1</a>// 導(dǎo)出,使用這種方式 可以,使用 ajax請求不可以 導(dǎo)出excel function exportExcel(){var form = $("<form>");form.attr('style', 'display:none');form.attr('target', '');form.attr('method', 'post');form.attr('action', '${pageContext.request.contextPath}/user/export');var input1 = $('<input>');input1.attr('type', 'hidden');input1.attr('name', 'item');input1.attr('value', 'test'); /* JSON.stringify($.serializeObject($('#searchForm'))) */$('body').append(form);form.append(input1);form.submit();form.remove(); }

3.總結(jié):

  導(dǎo)出excel為什么不能用ajax請求?

  因為導(dǎo)出excel,實際上是文件下載,后臺需要往前端(瀏覽器)寫文件流的。而Ajax請求獲取數(shù)據(jù)都是“字符串”,整個交互傳輸用的都是字符串?dāng)?shù)據(jù),它沒法解析后臺返回的文件流,但瀏覽器可以。

4.Ajax與Form表單提交的區(qū)別:

  Ajax提交不會自動刷新頁面,需要手動處理。

  Form表單提交在數(shù)據(jù)提交后會刷新頁面,如果是Post提交,點擊刷新瀏覽器會提示 是否再次提交。

?

總結(jié)

以上是生活随笔為你收集整理的Ajax请求导出Excel的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。