【发布时间】:2014-12-04 07:21:23
【问题描述】:
当我在下面运行这段代码时,返回的“数据”是一个空字符串“[]”。 (至少通过 Chrome 控制台查看器查看)
如果我注释掉“event.preventDefault();”正如预期的那样,在 JS 中的行中,我得到了一个页面重新加载,以及一个带有通过 JSONLint 的结果的 JSON 字符串。我知道 PHP 正在工作,因为我正在将新插入到 mySQL 数据库中并且返回值是有意义的。
即使“数据”返回为空,一切似乎也能正常运行......(即,我首先得到了 FIRST 的 console.log,第二个是空字符串。)我就是无法得到返回的“ JS 上下文中的数据”值。
我对 Web 开发有点陌生,而不是编程……但是有人发现菜鸟的错误吗?我已经阅读了大约 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);
?>
【问题讨论】:
-
Ajax 有一个名为
succes的选项。只要 ajax 调用返回一个正输入,它就会被执行。把你来自done的物品放在那里。我不认为你可以在 ajax 调用之外调用你的数据线,因为这就是你所做的。 -
尝试
Console.log(formData); -
php 代码已经存在。
-
@Indrasinh Bihola 我已经放置了 formData 的 console.log 并且它已正确填充。请求到达 PHP 并进入数据库。我只是没有在数据变量中获取响应文本。
-
@Dorvalla 我已经尝试过 .done(function(data) 和 success: function(data 而且我没有得到数据中的信息。
标签: php jquery ajax forms preventdefault