当我运行下面的代码时,返回的“数据”是一个空字符串“[]”。 (至少通过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);
?>
PHP代码在哪里? – Pupil 2014-12-04 07:24:07
Ajax有一个叫做'succes'的选项。只要ajax调用返回正数输入,就会执行它。把你的物品从'完成'放在那里。我不认为你可以在ajax调用之外调用你的数据行,这就是你所做的。 – Dorvalla 2014-12-04 07:25:59
尝试'Console.log(formData);' – 2014-12-04 07:27:17