AJAX function clickbtnmakeExcel()
{
var uri= "GeneratePreCard";
xmlrequest.open("POST", uri, true); 
xmlrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
xmlrequest.send(null);
}SERVLET protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("application/vnd.ms-excel");

response.setCharacterEncoding("UTF-8");

        HSSFWorkbook wbook = new HSSFWorkbook();
HSSFSheet sheet = wbook.createSheet("new sheet");
sheet.setDefaultColumnWidth((short)18);

HSSFRow  row= sheet.createRow((short)0);
HSSFCell cell= row.createCell((short)0);
cell.setCellValue("卡的信息");
sheet.addMergedRegion(new Region(0,(short)0,1,(short)4));
 
row= sheet.createRow((short)2);
row.createCell((short)0).setCellValue("序 号");
row.createCell((short)1).setCellValue("序列号");
row.createCell((short)2).setCellValue("卡 号");
row.createCell((short)3).setCellValue("主持人密码");
row.createCell((short)4).setCellValue("会员密码");
 

OutputStream out = response.getOutputStream();
wbook.write(out);
        out.close();

用ajax发送的请求 到服务端,服务端用的servlet处理的。(想直接生成Excel文件到客户端)调试过了,生成的文件没问题,就是没反应,没返回?
望高手解惑!

解决方案 »

  1.   

    因为你没有返回个ajax一个结果你要response给ajax一个结果,要么是Text的,要么是xml的这样ajax的回调函数接受到应答返回结果给客户
      

  2.   

    那怎么返回Excel 那? 我要的是EXCEL 文件。text 和xml文件好做。关键是怎么返回Excel。
      

  3.   

    你的代码设置没有错,你可以用url或是form提交的方式来访问测试你的servlet,应该可以提示下载excel
    你也说了,text和xml文件好做,那么我们用text为例,假设你的servlet返回了"abc"三个字母,你的页面会刷新成只有"abc"吗?
    肯定不会,如果你不用javascript处理response中的"abc",则什么也不会发生。就跟你现在的excel文件一样
      

  4.   

    OutputStream out = response.getOutputStream(); 
    wbook.write(out);
    out.print("???");
    out.close(); 
      

  5.   

    前台:
    <script type="text/javascript">
            var xmlHttp = null;
            
            function createXMLHttpRequest(){
                if(window.ActiveXObject){
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }else if(window.XMLHttpRequest){
                    xmlHttp = new XMLHttpRequest();
                }
            }
            
            function change(){
                createXMLHttpRequest();
                var url = "/AjaxServlet?" + Math.random(); //你的servlet
                xmlHttp.onreadystatechange = callback;
                xmlHttp.open("GET", url, true);
                xmlHttp.send(null);
            }
            
            function callback(){
                if (xmlHttp.readyState == 4){
                    if (xmlHttp.status == 200){
                        var str=xmlHttp.responseText;//后台返回的数据
                        div1.innerHTML = str;
                    }
                }
            }
            
           
            </script>    <body onload="init()">
            <div id="div1"></div>
        </body>后台:
    PrintWriter out = response.getWriter();
    out.println("你在前台输出的数据!");
    out.flush();
    out.close();
      

  6.   

    都已经有生成excel的语句,干嘛还在页面里面生成?? 直接在form里面调用方法不就好了,这样调试也方便,比你在js里面方便多了吧
    public void WriteInReportByResponse(HttpServletResponse response, HSSFWorkbook wb) 
    {
    try {
    OutputStream op = response.getOutputStream();
    wb.write(op);
    op.flush();
    op.close();
    } catch (IOException e) {
    log.error(e.getMessage());
    }
    }
      

  7.   

    PrintWriter 没有 write方法吧
      

  8.   

    不好意思,说错了。我 是这么做的,有一个文件也要提交到服务器,不知道文件的大小,用form 或url提交的参数大小是不是有限制的?