C# Pdf文档作为对ajax调用的响应
我需要一个脚本,该脚本将json字符串传递给控制器中的函数,并处理响应pdf文档,以将其视为下载给用户 我返回一个c格式的FileResult数据类型的pdf文档,作为ajax调用的响应,该调用将JSON字符串传递给函数。 我需要这个pdf文档被视为下载给用户。我怎样才能做到这一点?我试图在ajax的成功中编写代码,但控件出错,通过调试,我发现这是一个解析错误 Ajax代码类似于 C代码类似于:C# Pdf文档作为对ajax调用的响应,c#,ajax,pdf,asp.net-core,model-view-controller,C#,Ajax,Pdf,Asp.net Core,Model View Controller,我需要一个脚本,该脚本将json字符串传递给控制器中的函数,并处理响应pdf文档,以将其视为下载给用户 我返回一个c格式的FileResult数据类型的pdf文档,作为ajax调用的响应,该调用将JSON字符串传递给函数。 我需要这个pdf文档被视为下载给用户。我怎样才能做到这一点?我试图在ajax的成功中编写代码,但控件出错,通过调试,我发现这是一个解析错误 Ajax代码类似于 C代码类似于: 当上述代码执行时,会调用错误警报,但此c函数返回一个pdf文档,但似乎ajax不接受它。您实际上不需
当上述代码执行时,会调用错误警报,但此c函数返回一个pdf文档,但似乎ajax不接受它。您实际上不需要ajax来进行此下载调用,您可以这样做
function DownloadFile(){
//do some calculation
window.location="{url to the action}?argument1=value1&argument2=value2....."
}
但是,如果必须通过ajax来实现,您可以获得并实现这一点
function DownloadFileUsingAjax(){
$.ajax({
url: "{url to the action}",
data: {
//Send json data that you want
}
})
.done(function(data){
//download function is from download.js
download(data, fileName, fileMimeType);
});
}
另一种方法是,您可以尝试模拟按钮单击事件来下载文件,如 客户端
@section Scripts{
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: '/Home/GetPDF',
method: 'get',
contentType:'application/json',
xhrFields: {
responseType: 'blob'
},
success: function (data, status, response) {
var filename = "";
var disposition = response.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
let a = document.createElement('a');
a.href = window.URL.createObjectURL(data);
a.download = filename;
document.body.append(a);
a.click();
window.URL.revokeObjectURL(url);
}
});
});
</script>
}
显示您的代码,也许我们可以提供帮助you@MarkSchultheiss我已经加上了。
function DownloadFileUsingAjax(){
$.ajax({
url: "{url to the action}",
data: {
//Send json data that you want
}
})
.done(function(data){
//download function is from download.js
download(data, fileName, fileMimeType);
});
}
@section Scripts{
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: '/Home/GetPDF',
method: 'get',
contentType:'application/json',
xhrFields: {
responseType: 'blob'
},
success: function (data, status, response) {
var filename = "";
var disposition = response.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
let a = document.createElement('a');
a.href = window.URL.createObjectURL(data);
a.download = filename;
document.body.append(a);
a.click();
window.URL.revokeObjectURL(url);
}
});
});
</script>
}
public FileResult GetPDF(string statementHTML)
{
var fileByte = System.IO.File.ReadAllBytes(@"xxx\Test.pdf");
return File(fileByte, "apllication/pdf", "Test.pdf");
}