Ajax-код не работает и возвращает Object Object - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть всплывающая форма для регистрации на моем сайте. И я хочу убедиться, что электронная почта еще не используется до отправки. Я использую "при отправке" внутри формы для вызова validateForm. Вызов validateForm работает. Это даже работает, когда у меня нет вызова Ajax в функции. Однако, когда я добавляю свой вызов Ajax, Ajax продолжает не работать. Это идет прямо к ошибке: и я получаю Object Object. Что не так с моей порцией Ajax, которая помешала бы его работе? Может ли быть какая-то настройка на моем хосте?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> </script>
<script type="text/javascript">
    function validateForm()
    {
        var email = document.forms["signupform"]["email"].value;
        if (email == "")
        {
            return false;
        }
        else
        {
            $.ajax({
                type: "POST",
                url: "/CheckEmail2.php",
                data: {User_Email:email},
                dataType: "text",
                success: function(resp)
                {
                    if (respects == "Found")
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                },
                error: function(data){
                    alert(data);

                }
            }); //end Ajax
        }

    }
</script>

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

вы получаете объект json, измените тип данных на "json", а затем выполните итерацию по ... что-то вроде следующего

$.ajax({
            type: "POST",
            contentType: 'application/json',
            url: "/CheckEmail2.php",
            data: {User_Email:email}, 
            dataType: "json",
            success: function(data){
              if(data.results.length > 0) {
              for(i in data.results){
                var eachItem = data.results[i];
                var xxx = eachItem.xxx; // example
                console.log(xxx);
                .....
                ...
0 голосов
/ 09 ноября 2018

Не ясно, какой тип данных возвращается. Вы указываете text в своем коде еще, если это json, это изменит вещи.

Пожалуйста, проверьте с помощью следующего кода:

function validateForm(){
  var email = document.forms["signupform"]["email"].value;
  var result = false;
  if (email != ""){
    $.ajax({           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data: { "User_Email": email },
      dataType: "text",
      success: function(resp){
        console.log(resp);
        if (resp != "Found"){
          result = true;
        }
      },
      error: function(data, status){
        console.log(data, status);
      }
    }); //end Ajax
  }
  return result;
}

При тестировании вы должны увидеть результаты в консоли. Также не ясно, как вы планируете использовать вашу функцию, но я предполагаю, что она должна возвращать true или false, поэтому это должно быть сделано вне вызова $.ajax().

Я не уверен, но я предполагаю, что вы захотите вернуть true, если возвращается Found, но это не та логика, которую вы используете. Так что подумайте, как вы хотите, чтобы это работало.

Обновление

Я бы посоветовал следующее в вашем PHP:

<?php
$search = array(
    "term" => "",
    "found" => false,
    "results" => ""
);
if(isset($_POST['User_Email'])){
    $search['term'] = $_POST['User_Email'];
    if(strpos($_POST['User_Email'], "@")){
        $search['found'] = true;
        $search['results'] = $_POST['User_Email'];
    }
}
header("Content-type:application/json");
echo json_encode($search);
?>

Это гарантирует, что вы возвращаете данные JSON, и вам будет проще обратиться к нему в коде AJAX. Сделайте несколько изменений примерно так:

function validateForm(){
  var email = document.forms["signupform"]["email"].value;
  var result = false;
  if (email != ""){
    $.ajax({           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data: { "User_Email": email },
      dataType: "json",
      success: function(resp){
        console.log(resp);
        if(resp.found){
          result = true;
        }
      },
      error: function(data, status){
        console.log(data, status);
      }
    }); //end Ajax
  }
  return result;
}

Надеюсь, это поможет.

0 голосов
/ 09 ноября 2018

вы получаете данные в JSON, поэтому вам нужно проверить console.log вместо оповещения, alert() не будет работать, а ваш ajax работает.

console.log(data); 

используйте f12, чтобы открыть Developerинструменты в ваших браузерах, а затем вы можете проверить в нем вкладку консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...