【问题标题】:Blob created on client side doesn't get updated with new data在客户端创建的 Blob 不会使用新数据进行更新
【发布时间】:2023-03-16 01:25:01
【问题描述】:

我正在创建一个 angularjs/laravel 应用程序,我需要实现一个功能来将某些数据导出为 PDF。 PDF 在后端使用laravel dompdf 生成,并作为 GET 请求的结果发送到 Angular。我还使用Angular File Saver 处理在请求成功回调时保存文件。到目前为止,代码在角度上看起来像这样

function (response) {
     var data = new Blob([response.data], { type: 'application/pdf' });
     console.log(data);
     FileSaver.saveAs(data, 'balance.pdf');
}

这很好用。 PDF 被正确生成并保存。问题是,当我更新数据(任何 CRUD 操作 - 也正确执行)然后我调用导出函数再次保存 PDF 时,它会与旧数据一起保存。 console.log(data) 行显示 Blob 始终以相同的大小创建(我不知道为什么,因为我使用了 new 关键字,所以我在内存中创建了一个新对象,除非我我错了)。为了获得包含更新数据的 PDF,我必须手动刷新浏览器,这违背了 SPA 的目的,也让用户感到困惑。如果有人能提供任何关于为什么会发生这种情况的提示,我将不胜感激。提前致谢

【问题讨论】:

  • 你检查了ajax的response.data还是后端生成的pdf是准确的?
  • @ARIFMAHMUDRANA pdf 是准确的。正如我所说,导出功能工作正常。结果我得到了一个正确的PDF,它被下载了。问题是,如果我更改数据并再次触发下载,PDF 没有得到更新。如果我手动刷新浏览器并触发下载,那么我会得到正确的数据

标签: javascript angularjs laravel blob filesaver.js


【解决方案1】:

问题已解决,问题在于 $http 请求的配置中设置的缓存属性。我之前已设置它以减轻服务器上的负载,以防发出许多连续请求。

【讨论】:

    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 2023-02-24
    • 2022-08-21
    • 2018-04-05
    • 1970-01-01
    • 2016-05-12
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多