javascript - AJAX序列化数据为空

标签 javascript php jquery ajax

我正在尝试通过 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

网络

Console - Network

最佳答案

这是因为 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/

相关文章:

javascript - 使用 regExp 不区分大小写的单词边界

javascript - 带有数据表的嵌套表

php - 如何从php中的文件夹中删除文件

javascript - 使用 $(fixedElem).on(event, dynamicElem, func) 时访问固定元素

javascript - (Jquery) 从 load[ed]() HTML 元素样式中获取背景图像路径

javascript - GreaseMonkey 有关 getElementsByClassName 的帮助

php - 使用 PHP 删除 mySql 行

php - 使用选项编写 PHP/MYSQL 搜索代码的最佳方式

javascript - 随机div,只显示其中的一部分

javascript - JQuery "includes"困惑