Javascript ajax调用成功时提交表单,ajax调用失败时阻止提交
我希望能够在ajax调用成功和失败时提交表单,以防止提交。有没有一种方法我可以做到这一点,但不给控制器打两次电话 控制器返回Javascript ajax调用成功时提交表单,ajax调用失败时阻止提交,javascript,c#,jquery,ajax,asp.net-core,Javascript,C#,Jquery,Ajax,Asp.net Core,我希望能够在ajax调用成功和失败时提交表单,以防止提交。有没有一种方法我可以做到这一点,但不给控制器打两次电话 控制器返回 return File(excelPackage.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName); AJAX调用 //Form contains action : /api/Excel/DownloadExcel $('#fo
return File(excelPackage.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
AJAX调用
//Form contains action : /api/Excel/DownloadExcel
$('#form').on('submit', function (e) {
var submit = false;
$.ajax({
url: '/api/Excel/DownloadExcel',
type: 'POST',
data: $('#form').serialize(),
async: false
})
.done(function () {
submit = true;
})
.fail(function (response) {
displayErrorMessage(response.status, response.responseText);
});
return submit;
});
因为您有一个表单,并且您提交了它,所以默认情况下,它将基于
操作
属性向您的服务器发送请求
问题是您的表单发送了一个请求,然后您还向服务器发送了另一个请求。因此,您在控制器中的操作已收到2个请求
在您的情况下,我建议在向服务器发送请求之前调用方法preventDefault
:
$('#form').on('submit', async function (e) {
// add this line to your event to prevent submiting by default
e.preventDefault();
try {
var file = await $.ajax({
url: '/api/Excel/DownloadExcel',
type: 'POST',
data: $('#form').serialize(),
async: false
});
console.log(file);
return true;
} catch (response) {
displayErrorMessage(response.status, response.responseText);
return false;
}
});
我还重写了你的活动,让它更清楚
如果要允许下载文件而不提交,可以重写事件:
$('#form').on('submit', function (e) {
e.preventDefault();
return false;
});
$('#download').on('click', async function (e) {
e.preventDefault();
// your ajax code goes here...
});
是否要将表单提交给其他控制器操作?我要提交表单以下载我返回的文件,如果我要阻止提交,文件将作为数据返回,而不是下载。如果我不清楚,很抱歉,我需要调用请求两次的原因是因为我想检查请求是否会失败。检查之后,我会再次提交表单以下载返回的文件。由于某些原因,当我阻止表单提交时,文件只会返回,而不会自动下载。谢谢你回答这个问题,我对编程很陌生。@qwer1234asdf你不需要发送两个请求就可以做同样的事情。当事件失败时,我们可以抓住它。您可以再次检查我的代码,如果请求成功,将调用
try
块中的代码,如果请求失败,将调用catch
块。还有一些方法可以做两次,但你似乎是在浪费资源。想象一下,如果您有100个用户同时单击下载按钮,您的操作将收到多少请求?200次请求,下载100次?