Javascript JQuery阻止表单在ajax中提交

Javascript JQuery阻止表单在ajax中提交,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,一般来说,我不熟悉JQuery和ajax,我想在从控制器获取数据后禁用表单提交(我使用的是Asp.net核心MVC)。问题是,即使我取消提交,它也会提交,如下所示: $("form").submit(function (e) { var link = '@Url.Action("Action", "Controller")'; var args = { arg1: Elem1.val(),

一般来说,我不熟悉JQuery和ajax,我想在从控制器获取数据后禁用表单提交(我使用的是Asp.net核心MVC)。问题是,即使我取消提交,它也会提交,如下所示:

$("form").submit(function (e) {
                var link = '@Url.Action("Action", "Controller")';
                var args = {
                    arg1: Elem1.val(),
                    arg2: Elem2.val()
                };
                $.ajax({
                    type: "GET",
                    url: link,
                    data: args,
                    dataType: "json",
                    success: function (data) {
                        alert(data.canacess); //Shows False
                        if (data.canacess== true) {
                            AllEnable();
                        }
                        else { //Goes here
                            e.preventDefault(); //Dont do this
                            alert(data.erromessage); //Do this
                        }
                    },
                    error: function () {
                        alert("Error. Kontaktujte správce.");
                        return;
                    }
                });
            });
我认为它必须使用ajax,因为在其他代码中它都可以工作

谢谢你的帮助

e.preventDefault()
需要在
submit
函数处理程序的范围内调用。现在,您正在AJAX回调处理程序中调用它,但为时已晚,无法产生任何效果

在我决定是否提交表格之前,有什么方法可以阻止我提交表格吗

对。为此,您需要始终调用
e.preventDefault()
,以停止表单提交,从而为AJAX请求提供执行和返回响应的时间。然后,基于该响应,您可以直接提交HTMLFormElement对象,而不是jQuery对象,并将表单数据发送到指定的
操作
。试试这个:

$(“表格”)。提交(功能(e){
e、 预防默认值();
var form=此;
$.ajax({
键入:“获取”,
url:'@url.Action(“Action”,“Controller”)',
数据:{
arg1:Elem1.val(),
arg2:Elem2.val()
},
数据类型:“json”,
成功:功能(数据){
if(data.canaccess){
AllEnable();
表单提交();
}
},
错误:函数(){
警报(“Error.Kontaktujte správce.”);
}
});
});

还要注意,在条件中使用布尔值时,将它们与真/假进行比较是多余的。类似地,
error
处理程序中的
return
也是多余的,因为它是函数中的最后一条语句。

e.preventDefault()
需要在
submit
函数处理程序的范围内调用。现在,您正在AJAX回调处理程序中调用它,这已经太晚了,无法产生任何效果。好的,在我决定是否提交表单之前,是否有任何方法可以阻止表单被提交?当然。我为你添加了一个答案这是否回答了你的问题?忽略已接受的答案,看看其他答案,就像感谢answear!表单现在提交,但需要将一些参数传递给我的控制器,如模型和所有。。有办法吗?顺便说一句:我正在给你一件外套,因为它符合我的要求。