java - 使用ajax调用处理资源

标签 java ajax spring rest

我的应用程序应该从数据库下载文件。

Controller :

@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!");
        }
    });
}

最佳答案

参见Download a file by jQuery.Ajax

这里发生的情况是,您的 ajax 请求正在向 url: 参数中指定的 /book/download/ 发出。当请求成功完成时,它会触发 success 回调。然而,您所做的只是显示一个警报 - 使用 alert("success!") - 因此不会再发生任何事情。

链接的答案解释了为什么你不能像你想象的那样简单地使用 ajax 来做到这一点。我没有重申所有链接的答案,因为它已经在那里进行了解释,但该答案的原理与您的问题完全相同。

关于java - 使用ajax调用处理资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54332134/

相关文章:

Mac 上的 Firefox 中的 JQuery AJAX 错误,用户数为 "Managed"

java - 动态创建文件中包含的所有对象

java - 如何获取要保存到 MDC 的请求 header

java - websphere 7(和 Spring Roo)与 javax.el.E​​LException 不兼容

java - 针对这种情况进行验证或重新绘制?

java - 访问 HashMap Java Android 中对象的属性

java - 从用户主目录导入资源

java - 从 Android 调用 Soap Web 服务

javascript - 如何通过ajax动态加载历史页面

php - 我可以使用 javascript 但不使用 jquery 或 ajax 将参数发送到 php Controller 吗?