2017-02-22 42 views
1

我试图检查数据库中是否存在电子邮件地址。我有一个外部JavaScript文件,用于调用我的jQuery(保持视图清洁)。也许是因为我在启用SSL的情况下运行? (我使用HTTPS)外部JavaScript文件中的AJAX调用未到达控制器中的ActionResult

功能的外部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 Parsing Error: no root element found Location: https://localhost:44347/Account/CheckEmailExists/ Line Number 1, Column 1:

我的理解是,这个ActionResult不存在。但它呢?

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

+0

您的控制器正在接收请求,但正在将其作为XML读取。你使用哪个版本的ASP.NET? MVC2在MVC3中没有内置的json支持。 – KarelG

+0

我正在使用MVC 5 – AxleWack

回答

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) 
     } 
    }); 
} 
+0

控制器仍然没有到达,数据仍然返回什么似乎什么也没有或一个空字符串 – AxleWack

+0

在我的控制器中添加[HttpPost],但结果仍然是:(我有这种感觉还有其他一些潜在的问题导致了这一点,我过去做了一个Ajax调用,并且一切正常,我昨天也尝试了你的建议,但是没有任何工作......我得到的错误与我的文章中相同:XML解析错误:找不到根元素 位置:https:// localhost:44347/Account/CheckEmailExists/ – AxleWack

+0

错误是什么? – codemirror

1

无需Json.StringifyContentType这里

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

控制器仍然没有到达,数据仍然返回什么似乎什么也没有或一个空字符串 – AxleWack

+0

在Ajax的URL中CheckEmailExist后删除'/' –

+0

为什么不使用远程验证来检查电子邮件存在与否? –

0

所以I F找出导致问题的原因...

在我的操作结果上方,我需要添加[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; 
} 

这就是我如何开始它(我做酥料饼来指定的电子邮件存在):

$("#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; 
     } 
}) 
相关问题