首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC jQuery AJAX调用操作方法为时已晚?

ASP.NET MVC jQuery AJAX调用操作方法为时已晚?
EN

Stack Overflow用户
提问于 2009-03-21 15:32:57
回答 1查看 8.4K关注 0票数 2

我在一个外部Javascript文件中有一些jQuery代码,它对我的控制器中的一个操作方法进行了ajax调用。外部Javascript文件中的代码如下。动作方法最终会被调用,但是它并没有被及时调用。当我在操作方法中设置一个断点时,直到单击submit按钮返回false之后才会调用它。当EmailExist函数返回" isvalid“时,isvalid是未定义的。

因此,这并不是动作方法最终被调用的问题,它只是不会被调用,无论出于什么原因,EmailExist总是返回未定义的,并且直到按钮点击返回之后,MVC action方法才会被调用。有什么想法吗?

操作方法:

代码语言:javascript
复制
        [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:

代码语言: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;
}

});

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-21 15:37:08

看起来您希望请求是同步的。要实现这一点,您需要将请求上的async选项设置为false。缺省设置是让请求是异步的,这样您就可以在请求完成之前从ajax调用返回。或者,您可以重写代码,以便成功回调实际执行此工作。后者更适合AJAX --但有时可能更复杂。

代码语言:javascript
复制
$.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);
    }
});

代码语言:javascript
复制
$("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 validation plugin作为所有验证需求的解决方案。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/669459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档