2014-12-04 2 views
0

Когда я запускаю этот код ниже, возвращаемые данные «это» пустая строка «[]». (По крайней мере, просмотрев через Chrome Console Viewer)Использование JQuery AJAX для отправки формы PHP, возврат данных пуст

Если я прокомментирую «event.preventDefault();» line в JS. Я получаю перезагрузку страницы, как и ожидалось, и строку JSON с результатами, которые передают JSONLint. Я знаю, что PHP работает, поскольку я получаю новые вставки в базу данных mySQL, и возвращаемые значения имеют смысл.

Кажется, что все работает корректно, даже с «данными» возвращается пустым ... (т.е. я получаю console.log из FIRST first и SECOND second, за которым следует пустая строка.) Я просто не могу получить возвращенный «данные» в контексте 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

+0

У Ajax есть опция под названием 'succes'. Его выполнение выполняется, как только вызов ajax возвращает положительный ввод. Поместите свои вещи из 'done'. Я не думаю, что вы можете назвать свою линию данных вне вызова ajax, потому что это то, что вы сделали. – Dorvalla

+0

Попробуйте 'Console.log (formData),' –

ответ

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

+2

Я ему не верю. Никакой код внутри этого 'if' не будет выполнен, если он не добавит это поле. – Barmar

+0

@Barmar Большое спасибо за просмотр моих утверждений. У меня возникла проблема с отсутствием данных в элементе успеха. Он не отображался при использовании html-сообщения, поскольку он заполняется. он предположительно предположил, что это происходит через ajax. Ухх ... компьютер делает именно то, что вы ему говорите. Мои предполагаемые вставки, которые работали там, где я возвращался обратно к сообщению формы HTML, а не AJAX. Если бы я мог дать вам два зеленых чека, я бы это сделал. Спасибо. – Gavin

Смежные вопросы