【问题标题】:How can client-side know that file is downloaded or received from server?客户端如何知道文件是从服务器下载或接收的?
【发布时间】:2021-05-13 19:34:52
【问题描述】:

我有一个从客户端发起的文件下载请求,我为此动态创建了一个带有一些隐藏属性的表单元素并将其提交 (POST) 到服务器。 现在,当请求正在进行时,我需要在下载完成后显示一个我需要隐藏的加载/微调器(即从服务器端收到的文件)

目前,我使用的机制是从客户端生成cookie名称并在请求中发送到服务器。当服务器准备好 blob/文件响应时,它会将文件与相同的 cookie 一起发送到客户端。 在客户端,它每隔几秒就会尝试读取 cookie,一旦找到 cookie,它就会隐藏微调器。

我的问题是是否有任何其他方法可以实现这一点,即不依赖 cookie 来确定文件是否准备就绪。

【问题讨论】:

  • 您正在寻找服务器发送的事件。或者,您也可以使用 WebSocket。

标签: javascript java jquery ajax cookies


【解决方案1】:

不要制作隐藏的表单元素(这看起来不像是表单的预期用途),而是使用 jQuery $.post() 方法。然后,您可以使用回调来确定文件何时完成下载,以及捕获和处理可能发生的任何错误。

例如在您的下载请求处理程序中:

$.post("/some-url", data)
  .done(function(responseData) {
    // do something with data
  })
  .fail(function(request, statusText, error) {
    // handle error
  })
  .always(function() {
    // hide spinner
  });

// show spinner

【讨论】:

  • 但这也需要对服​​务器端实现进行更改...我试图避免这种情况并从 UI 端寻找解决方案,如果可能的话...
  • 如果您使用FormData 对象以与表单最初相同的方式发送数据,则无需在服务器端进行任何更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 2022-01-13
  • 2012-06-14
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多