我可以在Ajax调用中编辑响应对象吗?

我可以在Ajax调用中编辑响应对象吗?,ajax,response,Ajax,Response,我的页面上有一个链接按钮,点击该按钮,我从某个系统下载一个文件,然后在服务器上使用response.write将文件压缩后发送到客户端 但是由于页面是ajaxified的,因此会抛出一个错误 是否可以通过呼叫向客户端发送文件 我正在使用。您可以发送任何您喜欢的数据,您只需要能够在JavaScript中处理它 JavaScript对压缩文件没有太多的作用(除非你喜欢在JavaScript中查找或编写压缩解压缩库)。没有理由使用AJAX回调请求文件,因为下载文件不会刷新页面,因此用户不会丢失上下文,

我的页面上有一个链接按钮,点击该按钮,我从某个系统下载一个文件,然后在服务器上使用
response.write将文件压缩后发送到客户端

但是由于页面是ajaxified的,因此会抛出一个错误

是否可以通过呼叫向客户端发送文件


我正在使用。

您可以发送任何您喜欢的数据,您只需要能够在JavaScript中处理它


JavaScript对压缩文件没有太多的作用(除非你喜欢在JavaScript中查找或编写压缩解压缩库)。

没有理由使用AJAX回调请求文件,因为下载文件不会刷新页面,因此用户不会丢失上下文,这通常是您喜欢AJAX回调的原因

根据您的评论,有两种方法可以解决此问题:

  • 您可以在从第二台服务器下载文件的同时写入响应流,从而使进度在浏览器的“打开/保存”对话框中可见
  • 您可以将文件临时存储在数据库/文件系统中的某个位置,并通过用户直接发出的第二个请求发送该文件

  • 第一种方法对我来说似乎更合理,因为您不必处理中间存储。

    不要使用Response.Write或Response.WriteFile强制下载文件,因为在这种情况下,这根本没有帮助

    为了完成您想要的操作,请将压缩文件保存在磁盘上,并将用户重定向到下载文件。您可以创建一个临时文件夹来保存动态创建的压缩文件,并每隔一小时或任何预定义的时间间隔刷新它们。您需要从标准的后置驱动非ajaxed调用调用此函数。这将保护国家

    Response.Redirect("path-file-to-download");
    Response.End();
    

    我有一个rad网格在我的页面上有链接按钮。单击任何链接按钮,我需要将文件从另一台服务器获取到应用程序服务器,然后将文件下载到客户端。由于下载文件可能会有延迟,我需要通知用户文件正在下载。因此,我使用rad ajax管理器显示下载面板,直到文件下载。下载文件时总是会有延迟,但每个浏览器都有一个对话框,该对话框按照标准和用户预期的方式工作(例如,在Chrome的一个选项卡上进行所有下载,或在Safari/Firefox中进行单个弹出式下载等)。为什么要以不同的方式重新实现这样的行为?打开/保存文件对话框显示从app server到客户端计算机的下载进度。我的应用程序中耗时的任务是将文件从外部服务器检索到应用程序服务器,然后将其发送到clientI see,那么我可能会划分此功能,请求仅从外部服务器检索文件,该服务器显示进度并在完成时通知成功,然后让用户在完成后单击链接并使用标准机制下载文件。最终用户看不到第三台服务器。所以我需要一次性下载文件。我无法重定向我的页面。。因为这是一个搜索页面,我需要保持用户在同一页面上。这将保持用户在同一页面上。浏览器会将该文件检测为可下载的非html文件。:)我不是在JS上压缩文件。我用另一个工具来做这件事。我从来没说过你是。您正在发送一个压缩文件作为响应。如果你想让JS做任何有用的事情,你必须用JS解压。为此,我需要将文件下载到非常大的客户机上。所以我想压缩它,然后发送给客户端。此外,问题不在于压缩,而在于使用ajaxified页面上的response.write方法发送文件时。您可以将文件发送到客户端。问题是-您希望客户如何处理它?如果你用Ajax发送,那么这个文件只能用JavaScript处理,我想不出没有解压缩就可以做什么有用的事情