Ajax代码无法正常工作并返回Object Object

时间:2018-11-09 07:36:28

标签: php jquery ajax

我在我的网站上有一个弹出式表单用于注册。而且,我想在提交之前确认该电子邮件尚未使用。我在表单中使用“提交时”来调用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 :(得分:0)

您正在获取JSON中的数据,这就是为什么必须console.log来检查而不是发出警报的原因,alert()无法正常工作,并且您的ajax也正常工作。

console.log(data); 

使用f12在浏览器上打开开发人员工具,然后可以在控制台选项卡中签入。

答案 1 :(得分:0)

不清楚返回的是哪种类型的数据。您在代码中指出了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;
}

测试时,您应该在控制台中看到结果。还不清楚您打算如何使用函数,但是我认为它需要返回truefalse,因此必须在$.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;
}

希望有帮助。

答案 2 :(得分:-1)

您正在接收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);
                .....
                ...