当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET MVC jQuery AJAX调用Action方法为时已晚?

如何解决《ASP.NETMVCjQueryAJAX调用Action方法为时已晚?》经验,为你挑选了1个好方法。

我在外部Javascript文件中有一些jQuery代码,它对我在控制器中的操作方法进行ajax调用.外部Javascript文件中的代码如下所示.最终会调用action方法,但不会及时调用它.当我在action方法中设置断点时,直到提交按钮单击返回false后才会调用它.当EmailExist函数返回"isvalid"时,isvalid未定义.

所以它不是最终调用的action方法的问题,它不会因为任何原因而被调用,EmailExist总是返回undefined,并且在返回按钮单击之前不会调用MVC Action方法.有什么想法吗?

行动方法:

        [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult EmailExist(string email)
    {
        Account account = _generalService.GetAccountByEmail(email);

        bool exist = false;
        if (account != null)
            exist = true;

            return Json(new { indb = exist });
    }

使用Javascript:

$(document).ready(function() {
$("input[type=submit]").click(function() {

    var valid = true;

    // email - check required and valid

    var email = $("input[name='email']");
    var emailtrim = jQuery.trim(email.val());

    // email exists in db ajax request
    if (EmailExist(emailtrim)) {
        valid = false;
    }

    return valid;
})

function EmailExist(emailval) {

    var isvalid;

    // hit db
    $.ajax(
    {
    type: "POST",
    url: "/Account/EmailExist",
    data: { 'email': emailval },
    success: function(result) {

        if (result.indb) {
            isvalid = true;

        }
    },
    error: function(error) {
        alert(error);
    }
});

    return isvalid;
}

});



1> tvanfosson..:

看起来您希望请求是同步的.要实现此目的,您需要将请求上的async选项设置为false.默认情况下,请求是异步的,以便在请求完成之前从ajax调用返回.或者,您可以重写代码,以便成功回调实际上可以完成工作.后者对于AJAX更为惯用 - 但有时可能更复杂.

$.ajax(
    {
    type: "POST",
    async: false,              // <- note addition
    url: "/Account/EmailExist",
    data: { 'email': emailval },
    success: function(result) {

        if (result.indb) {
            isvalid = true;

        }
    },
    error: function(error) {
        alert(error);
    }
});

要么

$("input[type=submit]").click(function() {

    // email - check required and valid

    var form = $(this).parent('form');
    var email = $("input[name='email']");
    var emailtrim = jQuery.trim(email.val());

    SubmitIfNoEmailExists(form,emailtrim);

    return false;
});

function SubmitIfNoEmailExists(form,emailval) {

    // hit db
    $.ajax({
        type: "POST",
        url: "/Account/EmailExist",
        data: { 'email': emailval },
        success: function(result) {
            if (!result.indb) {
               form.submit();
            }
        },
        error: function(error) {
            alert(error);
        }
    });
}

编辑:根据您的意见,您可能还想看看使用jQuery 验证插件作为所有验证需求的解决方案.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有