从JSP显示“另存为”窗口

时间:2012-05-11 14:52:27

标签: javascript ajax jsp http-headers xmlhttprequest

我需要在客户端的文件中编写一个String,但由于Internet协议不允许出于安全考虑,这就是我所做的解决方法:我有一个AJAX请求调用查询数据库的JSP得到一个字符串。我需要向用户显示“另存为”对话框,并将此String写入他们指定的本地路径。

我的JavaScript功能:

function openReport(id)
{
    var url = "../reports/reportsHandler.jsp?id=" + id;

    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            //alert(xmlhttp.responseText);
            alert("result obtained");
        }
    }
    xmlhttp.open("POST", url, true);
    xmlhttp.send();
}

在JSP中,我有类似的东西:

response.setHeader("Content-Disposition", "attachment;filename=report.xml");
out.println(stringObtainedFromDatabase);

当我收到提示结果时,我没有看到“另存为”对话框。这是我第一次这样做,你能不能告诉我我做错了什么?

但是,有没有一种方法可以在JavaScript中向用户显示“另存为”对话框,并在客户端系统的文件中写入“div”标记的内容?

1 个答案:

答案 0 :(得分:2)

使用常规HTTP请求,而不是AJAX(XMLHttpRequest)。

function openReport(id)
{
    var url = "../reports/reportsHandler.jsp?id=" + id;
    window.location = url;
}

这将发送HTTP GET,而不是POST,尽管看起来GET是正确的HTTP方法,因为您正在检索数据而不是实际更改服务器上的任何内容。