Java jQuery/Ajax显示另存为对话框,用于下载从servlet发送的文件

Java jQuery/Ajax显示另存为对话框,用于下载从servlet发送的文件,java,ruby-on-rails,Java,Ruby On Rails,我在网站上读到很多关于这个问题的问题,不确定其中有谁能解决我的问题。下面是我的应用程序应该如何工作: 该页面将显示服务器上以前下载过的可用文件列表。 该页面还将有一个按钮,单击该按钮时,该按钮将向servlet发送请求,servlet将在服务器上收集数据,并将其保存为预定义目录中的zip文件。servlet然后读取文件并将其作为二进制流发送回客户端,其中包含以下响应内容类型和头信息: 内容类型=应用程序/八位字节流 标题=内容处置,附件;文件名=。。。 标题=内容类型,应用程序/x-下载 要求是

我在网站上读到很多关于这个问题的问题,不确定其中有谁能解决我的问题。下面是我的应用程序应该如何工作:

该页面将显示服务器上以前下载过的可用文件列表。 该页面还将有一个按钮,单击该按钮时,该按钮将向servlet发送请求,servlet将在服务器上收集数据,并将其保存为预定义目录中的zip文件。servlet然后读取文件并将其作为二进制流发送回客户端,其中包含以下响应内容类型和头信息: 内容类型=应用程序/八位字节流 标题=内容处置,附件;文件名=。。。 标题=内容类型,应用程序/x-下载 要求是请求是异步的,因为servlet可能需要很长时间来收集可能超过100 MB的大量数据。 我必须在请求进行时禁用该按钮,并知道请求何时完成,以便我可以发送刷新列表以显示新文件。 我认为使用iframe、Window.location.href或使用html表单的解决方案不能满足我的要求。请让我知道是否有任何解决我的问题的办法。非常感谢您的帮助


-Tam

当您在问题标题中写下它时,我建议您使用一点javascript,JQuery或prototype都可以完成这项工作

由于我对最后一个了解更多,我将给出一些代码

这是我对你的案子了解的过程

首先,服务器发送一个带有表单的页面。 然后用户选择一个文件并单击send按钮,页面不会重新加载并使用Ajax完成任务 JQuery获取数据并通过Ajax请求将其发送到服务器;然后 服务器发回结果,您可以将其显示在displayFilesList中

您的表单id是您的表单id

submitForm是提交表单时调用的函数的名称

DisplayFileList是服务器发回结果时调用的函数。此函数还希望您以json格式发回结果

$('#your_form_id').submit(submitForm);

function submitForm()
{
    var data = $('#your_form_id').serializeArray();
    //Code to remove the send button here
    //Code to insert a loading.gif
    request("/your/url", data, displayFilesList);
    return false;
}

function    displayFilesList(jsonResult)
{
    var data = jQuery.parseJSON(jsonResult);
    //Code to display the files list here
    //
}

function    request(url, paramPost, successCallback, errorCallback)
{
    if ((typeof successCallback == 'undefined') || (successCallback == null))
        successCallback = dispSuccess;
    if ((typeof errorCallback == 'undefined') || (errorCallback == null))
        errorCallback = dispError;

    var AjaxUrl = url;

    $.ajax({    
            type: "POST",
            url: AjaxUrl,
            data: paramPost
           }
          ).done( function(msg)
                  {
                       successCallback(msg);
                  }
          ).fail( function(jqXHR, textStatus, errorThrown)
                  {
                       errorCallback(jqXHR, textStatus, errorThrown);
                  }
          );
}

function    dispError(jqXHR, textStatus, errorThrown)
{
    alert(jqXHR.responseText);
}
function    dispSuccess(html)
{
    alert(html);
}