防止ajax表单在客户端错误上调用服务器

Posted

技术标签:

【中文标题】防止ajax表单在客户端错误上调用服务器【英文标题】:Prevent ajax form to call server on client side errors 【发布时间】:2014-03-06 01:29:46 【问题描述】:

我有一个表单,我在提交按钮上使用它来获取一些值并返回带有这些值的部分。

在页面中,我包含了 jquery 验证和不显眼的 .. 在客户端进行验证,这很好,它验证了,但仍然调用服务器,我该如何避免它?

@using (html.BeginForm("Index", "Search", FormMethod.Post, new  role = "form", @class = "form-horizontal", id = "SearchForm" ))

    @Html.AntiForgeryToken();
    @Html.EditorFor(m => m.Test);

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-default">@Base.Search</button>
        </div>
    </div>
               

@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jqueryui")

$('#SearchForm').on('submit', function (evt) 
    evt.preventDefault();
    $.post('/Search/Index', $(this).serialize(), function (response) 
        $('#searchResults').html(response);
    );
);

这是我的控制器

[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Index(SearchModel searchModel)

    if (ModelState.IsValid)
    
        return PartialView("SearchResults", searchModel);
    

    return null;

【问题讨论】:

这个客户端验证在哪里? 有的,忘记复制了) 【参考方案1】:

你试过了吗

$('#SearchForm').on('submit', function (evt) 
    evt.preventDefault();

    if(!$(evt.currentTarget).valid())
        return false;

    $.post('/Search/Index', $(this).serialize(), function (response) 
        $('#searchResults').html(response);
    );
);

但必须只是 jquery 验证。

【讨论】:

以上是关于防止ajax表单在客户端错误上调用服务器的主要内容,如果未能解决你的问题,请参考以下文章

在服务器端分页上防止来自 jquery 数据表的多个 ajax 调用

用于ajax调用的spring security csrf保护

JQuery ajax调用在200上执行错误[重复]

ajax:在jquery基础上又封装了一个ajax

从节点 JavaScript 返回到 jQuery 的 Ajax 调用落在错误函数上

如何防止表单提交在字段上点击输入? [复制]