1

我使用 MVC 并想通过 jquery 提交表单,但是为了让 mvc 内置验证在任何无效输入的情况下工作,我已经设置了 click 事件的“return false”(也尝试了“event.preventDefault "),以防从控制器获得“成功” json 返回。

这是代码:

$(document).ready(function () {
    var request;
    $('#formSubmit').click(function (event) {
        request = $.ajax({
            url: '/personManager/loadDetails/',
            type: 'post',
            data: $('form').serialize()
        });
        request.done(function(data){
            if(data=="success")
                event.preventDefault();
            });

        });
    });

我不能让它工作......我做错了什么?另外,在使用 jquery 时,是否有更有效的方法来保留 mvc 验证机制?

更新:如果我尝试更简单地描述我的愿望:我想设置 click 事件的 preventDefault 条件,所以在某种情况下它会调用表单提交,而在其他情况下,它不会,只有 $.ajax 工作. 在我在服务器端确认没有采取任何行动后,第二个准确。一定有办法的,我猜...

4

3 回答 3

6

问题很可能是因为您的 ajax 是异步的。将其设置为同步,您的代码应该可以正常工作。但是请注意,如果服务器无法立即响应,您将面临用户浏览器冻结的风险。

于 2012-04-19T15:28:39.757 回答
1

上周我遇到了类似的问题。你需要设置async:false你的$.ajax功能。您的默认事件可能在ajax响应有机会阻止这种情况之前运行。这是因为 AJAX 是异步运行的。设置async:false将防止这种情况发生。但正如@Kolink所指出的,这确实意味着如果响应失败,您的页面可能会冻结。

$(document).ready(function (e) {
    var request;
    var preventDefault = false;
    $('#formSubmit').click(function (event) {
        request = $.ajax({
            url: '/personManager/loadDetails/',
            type: 'post',
            data: $('form').serialize()
            , async: false
        });
        request.done(function (data) {
            if (data == "success")
                preventDefault = true;
        });

        if (preventDefault){
           e.preventDefault();
        }

    });
});
于 2012-04-19T15:25:21.460 回答
0

为什么不使用,jQuery 验证?您需要特定于服务器端的验证吗?我意识到您已经在使用 mvc 内置验证,但是由于您使用 jQuery 提交表单,您不妨使用它进行验证。只是一个建议,因为这样你可以这样做:

$(document).ready(function () {
    $('form').validate({
        rules: {},
        messages: {}
    });
    var request;
    $('#formSubmit').click(function (event) {
            if($('form').valid()){
                request = $.ajax({
                    url: '/personManager/loadDetails/',
                    type: 'post',
                    data: $('form').serialize()
                });
                request.done(function(data){
                    if(data=="success")
                        event.preventDefault();
                    });                     
            }

        });
    });
于 2012-04-19T15:54:05.993 回答