外部JavaScript文件中的AJAX调用未到达控制器中的ActionResult

时间:2017-02-22 16:05:17

标签: javascript jquery ajax

我正在尝试检查数据库中是否存在电子邮件地址。我有一个外部JavaScript文件,我用来调用我的jQuery(以保持我的视图干净)。也许是因为我在启用SSL的情况下运行? (我使用的是https)

外部js文件中的函数:

function checkemail() {
    var email = $("#email").val();
    $.ajax({
        url: "/Account/CheckEmailExists/",
        data: JSON.stringify({ p: email }),
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            alert(data)
        }
    });
}

控制器中的操作:

public ActionResult CheckEmailExists(string p)
            {
                bool bEmailExists = false;

                using (RBotEntities EF = new RBotEntities())
                {
                    var query = (from U in EF.AspNetUsers
                                 where U.Email == p
                                 select U).FirstOrDefault();

                    if(query.Email != null)
                    {
                        bEmailExists = true;
                    }
                    else
                    {
                        bEmailExists = false;
                    }
                }

                return Json(bEmailExists, JsonRequestBehavior.AllowGet);
            }

我似乎收到一条错误说明以下内容:

  

XML解析错误:找不到根元素位置:   https://localhost:44347/Account/CheckEmailExists/第1行,   第1栏:

我的理解是ActionResult不存在。但确实如此?

我做错了什么,或者有没有理由不能通过外部JavaScript文件调用ActionResult

3 个答案:

答案 0 :(得分:1)

试试这个

在控制器

[httppost]
 public ActionResult CheckEma.........

在JS中

function checkemail() {
    var email = $("#email").val();
    $.ajax({
        url: "/Account/CheckEmailExists/",
        data: { p: email },
        type: "POST",
        success: function (data) {
            alert(data)
        }
    });
}

答案 1 :(得分:1)

此处不需要Json.StringifyContentType

function checkemail() {
        var email = $("#email").val();
        $.ajax({
            url: "/Account/CheckEmailExists",
            data: { p: email },
            type: "POST",
            success: function (data) {
                alert(data)
            }
        });
    }

答案 2 :(得分:0)

所以我发现了造成这个问题的原因......

在我的行动结果之上,我需要添加[AllowAnonymous]数据注释,然后它到达我的ActionResult!我宁愿不允许匿名,但它有效,我想分享这个,以防它帮助其他人。以下是我的代码:

的ActionResult:

[AllowAnonymous]
public ActionResult CheckEmailExists(string p)
{
    bool bEmailExists = false;

    using (RBotEntities EF = new RBotEntities())
    {
        var query = (from U in EF.AspNetUsers
                     where U.Email == p
                     select U).FirstOrDefault();

        if (query.Email != null)
        {
            bEmailExists = true;
        }
        else
        {
            bEmailExists = false;
        }
    }

    return Json(bEmailExists, JsonRequestBehavior.AllowGet);
}

JavaScript文件中的JavaScript函数:

function checkemail() {
    var email = $("#email").val();
    var bReturnedValue = false;
    $.ajax({
        url: "/Account/CheckEmailExists/",
        data: { p: email },
        async: false,
        success: function (data) {
            if(data)
            {
                bReturnedValue = true;
            }
            else
            {
                bReturnedValue = false;
            }
        }
    });

    return bReturnedValue;
}

这就是我发起它的方式(我正在做一个popover来指定电子邮件存在):

$("#createacc_next").click(function () {
var bEmailExists = false;

 bEmailExists = checkemail();

if (bEmailExists) {
            $("#email").attr("disabled", false).css("border-color", "red");
            $('#email').popover({ title: 'Attention', content: 'Email address already exists', placement: 'top', trigger: 'focus' });
            Email_Validation_Passed = false;
        }
})