2014-12-04 143 views
0

当我运行下面的代码时,返回的“数据”是一个空字符串“[]”。 (至少通过Chrome控制台查看器查看)使用JQuery AJAX向PHP提交表单,返回数据为空

如果我注释掉“event.preventDefault();”在JS中我得到一个页面重新加载,如预期的,并且JSON字符串的结果通过JSONLint。我知道PHP正在工作,因为我正在将新的插入到mySQL数据库中,并且返回值是有意义的。

即使“数据”返回空白,一切似乎仍然正常运行...(即我得到的第一个和第二秒的console.log接着是空字符串。)我只是无法得到返回JS上下文中的“数据”值。

我对网络开发不熟悉,而不是编程......但是有没有人发现一个新手的错误?我已经阅读了大约12个类似的问题,并尝试了很多东西,但没有什么帮助...

在此先感谢。

$(document).ready(function() { 
 
    $('form').submit(function(event) { 
 
     var formData = { 
 
      'firstName': $('input[name=firstName]').val(), 
 
      'lastName': $('input[name=lastName]').val(), 
 
      'email': $('input[name=email]').val(), 
 
      'password': $('input[name=password]').val() 
 
     }; 
 

 
     $.ajax({ 
 
      type: 'POST', 
 
      url: 'createaccount.php', 
 
      data: formData, 
 
      dataType: 'json' 
 
     }) 
 
      .done(function(data) { 
 
       console.log("SECOND"); 
 
       console.log(data); 
 
      }); 
 
     
 
     console.log("FIRST"); 
 
     event.preventDefault(); 
 
    }); 
 
});
input { 
 
     border-radius: 5px; 
 
     border-width: 1px; 
 
     margin: 2px; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
     <div class="row"> 
 
      <div class="col-lg-12 text-center"> 
 
       <div class="col-lg-4"></div> 
 
       <div class="col-lg-4 text-right"> 
 
       <h1>Join website</h1> 
 
        <form action="createaccount.php" method="post"> 
 
         <label>First Name:</label><input type="text" name="firstName" /><br/> 
 
         <label>Last Name:</label><input type="text" name="lastName" /><br/> 
 
         <label>Email:</Label><input type="email" name="email" /><br/> 
 
         <label>Password:</label><input type="password" name="password" /><br/> 
 
         <input type="submit" value="Sign Up" name="submit" /> 
 
        </form> 
 
       </div> 
 
       <div class="col-lg-4"></div> 
 
      </div> 
 
     </div>

<?php 
 

 
    $firstName = $_POST["firstName"]; 
 
    $lastName = $_POST["lastName"]; 
 
    $email = $_POST["email"]; 
 
    $password = $_POST["password"]; 
 
    $submit = $_POST["submit"]; 
 

 
    $errors = array(); 
 
    $data = array(); 
 

 
    if ($submit) { 
 
     if (!$email) { 
 
      $errors['email'] = "Email is required."; 
 
     } 
 
     else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
 
      $errors['validemail'] = "Valid email is required."; 
 
     } 
 
     
 
     if (!$password) { 
 
      $errors['password'] = "Password is required."; 
 
     } 
 
     else { 
 
      if (strlen($password) < 8) { 
 
       $errors['passwordlength'] = "Password must be at least 8 characters long"; 
 
      } 
 
      if (!preg_match("#[A-Z]+#", $password)) { 
 
       $errors['passwordcaps'] = "Password must contain at least one Capital Letter"; 
 
      } 
 
     } 
 
    
 
        
 
     if (empty($errors)) { 
 
        
 
      require 'dbconnect.php'; 
 
      
 
      $query="SELECT * FROM Users WHERE email='".mysqli_real_escape_string($link, $email)."'"; 
 
      
 
      $result = mysqli_query($link, $query); 
 
      
 
      $results = mysqli_num_rows($result); 
 
                        
 
      if ($results) { 
 
       $errors['exists'] = "That email address is already registered."; 
 
      } 
 
      else { 
 
       $firstName = mysqli_real_escape_string($link, $firstName); 
 
       $lastName = mysqli_real_escape_string($link, $lastName); 
 
       $email = mysqli_real_escape_string($link, $email); 
 
       $password = md5(md5($email).$password); 
 
      
 
       $query="INSERT INTO `Users` (`FirstName`, `LastName`, `Email`, `Password`, `IsRater`, `IsRatee`) VALUES('$firstName', '$lastName', '$email', '$password', '1', '1');"; 
 
      
 
       if(!mysqli_query($link, $query)) { 
 
        $errors['SQLQuery'] = "Failed SQL Insert" . mysqli_error($link); 
 
       } 
 
       else 
 
       { 
 
        $data['success'] = true; 
 
        $data['message'] = 'Your account has been created!'; 
 
       } 
 
      } 
 
     } 
 
     
 
     if(!empty($errors)) { 
 
      $data['success'] = false; 
 
      $data['errors'] = $errors; 
 
     } 
 
    } 
 

 
    echo json_encode($data); 
 
?>

+0

PHP代码在哪里? – Pupil 2014-12-04 07:24:07

+0

Ajax有一个叫做'succes'的选项。只要ajax调用返回正数输入,就会执行它。把你的物品从'完成'放在那里。我不认为你可以在ajax调用之外调用你的数据行,这就是你所做的。 – Dorvalla 2014-12-04 07:25:59

+0

尝试'Console.log(formData);' – 2014-12-04 07:27:17

回答

0

的PHP代码检查$_POST['submit']无论是做与表单数据进行任何之前设置,但你永远不设置在formData。请尝试:

var formData = { 
     'firstName': $('input[name=firstName]').val(), 
     'lastName': $('input[name=lastName]').val(), 
     'email': $('input[name=email]').val(), 
     'password': $('input[name=password]').val(), 
     'submit': 'on' 
    }; 
+0

但他说他正在插入 – shaN 2014-12-04 08:21:20

+2

我不相信他。如果他没有添加那个字段,那么'if'里面的任何代码都不会被执行。 – Barmar 2014-12-04 08:22:22

+0

@Barmar非常感谢您浏览我的断言,我在成功项目中没有数据时遇到了问题。它没有出现在使用HTML文章,因为它确实填补了。我没有也认为它也是通过ajax进入的。呃...计算机完全按你说的去做。我假设的插入工作的地方,当我恢复到HTML表单发布而不是AJAX。如果我能给你两张绿色支票,我会的。谢谢。 – Gavin 2014-12-04 14:49:07