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

外部JavaScript文件中的AJAX调用未到达控制器中的ActionResult,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试检查数据库中是否存在电子邮件地址。我有一个外部JavaScript文件,用来调用jQuery(保持视图干净)。也许是因为我在运行时启用了SSL?(我正在使用https) 外部js文件中的函数: function checkemail() { var email = $("#email").val(); $.ajax({ url: "/Account/CheckEmailExists/", data: JSON.stringify({ p:

我正在尝试检查数据库中是否存在电子邮件地址。我有一个外部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分析错误:未找到根元素位置: 第1行, 第1栏:

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

我是否做错了什么,或者为什么不能通过外部JavaScript文件调用
ActionResult

内部控制器

[httppost]
 public ActionResult CheckEma.........
在JS中


这里不需要
Json.Stringify
ContentType

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

所以我找到了问题的原因

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

行动结果:

[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来指定电子邮件的存在):


您的控制器正在接收请求,但正在将其作为XML读取。您使用哪个版本的ASP.NET?MVC2不支持内置json,而MVC3支持内置json。仍然无法访问控制器,并且数据仍然返回在我的控制器中添加[HttpPost]的内容,但结果仍然相同:(我有一种感觉,这是由其他一些潜在的问题造成的。我过去做过ajax调用,一切都很好。我也尝试了你昨天的建议,但没有任何效果……我得到的错误与我的帖子中的错误相同:XML解析错误:找不到根元素位置:控制器仍然无法访问d、 而且数据仍在返回看似空白或空字符串的内容删除Ajax URL中CheckEmailExist后的“/”为什么不使用远程验证来检查电子邮件是否存在?删除“/”不幸的是,没有什么不同。我在做一种只在最后提交的向导,所以每次我进入下一步时,我都会使用jQuery进行所有验证,所以这就是为什么我需要通过ajax调用调用actionresult的原因。但这不起作用是毫无意义的……应该添加
数据类型:“json”
在ajax调用中。不确定这是否有效
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;
}
$("#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;
        }
})