我正在尝试通过 AJAX 发布表单数据。
当我删除 AJAX 函数并执行标准形式的 POST 方法时,数据会被很好地插入到数据库中。当我 console.log
提交表单的序列化数据时,它显示正常。
当 AJAX 函数被触发时,数据似乎消失了。该函数成功触发,但没有插入数据,并且 formdata 变量似乎为空。任何人都可以阐明这一点吗?
这是到目前为止的代码 -
jQuery/AJAX -
$('#calendar-form').submit(function() {
var formdata = $(this).serialize();
console.log(formdata);
$.ajax({
url: "insert.php",
type: "POST",
data: formdata,
success: function() {
alert('success')
},
error: function() {
alert('ERROR');
}
});
return false;
});
HTML
<form id="calendar-form" action="" method="" accept-charset="utf-8">
<input type="text" name="name" id="name">
<input type="text" name="email" id="email">
<input type="hidden" name="site" id="site" value="<? echo $_SERVER['HTTP_HOST'] ?>">
<input class="submit" type="submit" name="submit" value="Submit">
</form>
PHP
try {
$bd = new PDO("mysql:host=localhost;dbname=;charset=utf8", "", "");
// $bd->setAttribute(PDO::ATT_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Theres been an error while attempting to connect to the database';
}
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$site = $_POST['site'];
$sql = "INSERT INTO `users`(`name`, `email`, `site`) VALUES ('$name', '$email', '$site')";
try {
$query = $bd->prepare($sql);
$query->bindValue(':name', $name, PDO::PARAM_STR);
$query->bindValue(':email', $email, PDO::PARAM_STR);
$query->bindValue(':site', $site, PDO::PARAM_STR);
if($query->execute()){
echo "Success";
}else{
echo "Failure";
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
注意:我已经删除了这篇文章的数据库详细信息,但它们存在于代码中。
控制台
name=Benji&email=email%40email.com&site=localhost%3A8888 - script.min.js:9:117
网络
最佳答案
这是因为 jQuery 的 .serialize()
does not include the submit button :
No submit button value is serialized since the form was not submitted using a button.
检查控制台中 console.log(formdata)
的输出 - 您会发现 submit
丢失。由于缺少它,您在后端对该值所做的测试将失败:
if(isset($_POST['submit'])){
具体如何解决这个问题取决于您想要做什么。如果您只是想确保请求是 POST(而不是 GET),您可以使用:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
如果您想进行基本验证,您可以显式检查每个预期值是否存在:
if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['site'])) {
关于javascript - AJAX序列化数据为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329929/