2017-02-22 3 views
1

Я пытаюсь проверить, существует ли в базе данных адрес электронной почты. У меня есть внешний файл JavaScript, который я использую для вызова моего jQuery (чтобы мой взгляд был чистым). Возможно, это потому, что я работаю с включенным SSL? (Я использую HTTPS)AJAX вызов внешнего файла JavaScript, не достигнув 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 не существует. Но это так?

Я что-то не так, или есть причина, по которой ActionResult не может быть вызван через внешний файл JavaScript?

+0

Ваш контроллер получает запрос, но читает его как XML. Какую версию ASP.NET вы используете? MVC2 не имеет встроенной поддержки json, а MVC3. – 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-звонки в прошлом, и все работало нормально. Я попробовал то, что вы вчера предложили, но ничего не работает ... Ошибка im get такая же, как и в моем сообщении : Ошибка анализа XML: нет корневого элемента Местонахождение: https: // localhost: 44347/Account/CheckEmailExists/ – AxleWack

+0

Какая ошибка? – codemirror

1

Нет необходимости в Json.Stringify и ContentType здесь

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

Контроллер все еще не достигнут, и данные все еще возвращают то, что кажется ничтожным, или пустая строка – AxleWack

+0

удалите '/' после CheckEmailExist в Ajax Url –

+0

Почему вы не используете Remote Validation для проверки электронной почты Exist or not ? –

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; 
} 

И это, как я начал (я делаю поповер, чтобы указать, что письмо существует):

$("#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; 
     } 
}) 
Смежные вопросы