为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ajax 调用处理资源

使用 ajax 调用处理资源

慕雪6442864 2022-05-21 13:11:17
我的应用程序假设从数据库下载文件。控制器:@GetMapping(value = "/download/{id}")public ResponseEntity<Resource> downloadBook(@PathVariable Long id) {Book book = bookService.findById(id);return ResponseEntity.ok().contentType(MediaType.APPLICATION_PDF)        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + book.getFileName() + ".pdf\"")        .body(new ByteArrayResource(book.getFile()));}当我直接从浏览器(下载弹出窗口)调用它时,这有效,但我想做的是用 ajax 调用处理它。到目前为止,这是我的 ajax 方法,但这段代码实际上只是提醒我成功,没有弹出下载。downloadBook : function(bookId) {    $.ajax({        url : basePath + '/book/download/' + bookId,        success : function() {            alert("success!");        },        error : function() {            alert("error!");        }    });}
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

请参阅通过 jQuery.Ajax 下载文件

这里发生的是您的 ajax 请求正在/book/download/按照url:参数中的指定进行。当请求成功完成时,它会触发success回调。但是,您在那里所做的只是显示警报 - 与alert("success!")- 所以不会发生任何进一步的事情。

链接的答案解释了为什么您不能像您想象的那样简单地使用 ajax 执行此操作。我没有重复所有链接的答案,因为它已经在那里进行了解释,但是该答案的主要内容与您的问题完全相同。


查看完整回答
反对 回复 2022-05-21
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

downloadBook : function(bookId) {

    window.location = basePath + '/book/download/' + bookId

}

我的 downloadBook 方法现在看起来像这样,它解决了我的问题。


查看完整回答
反对 回复 2022-05-21
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信