使用ajax将表单提交给php而不刷新页面

Posted

技术标签:

【中文标题】使用ajax将表单提交给php而不刷新页面【英文标题】:Form submit with ajax passing form to php without page refresh 【发布时间】:2021-09-26 11:45:24 【问题描述】:

有人可以告诉我为什么这段代码不起作用我想通过 post 方法将表单数据发送到 php,但是我的 PHP 没有收到任何请求 这是我的注册表单 signupmodal.php

  <form action="<?php htmlentities($_SERVER['PHP_SELF']) ?>" method="post" id="signupForm">
                    <div class="form-group">
                        <label for="forUserName">User Name:</label>
                        <input type="text" name="username" id="username" class="form-control" placeholder="Enter User Name" aria-describedby="helpId">
                    </div>
                    <div class="form-group">
                        <label for="forEmail">Email:</label>
                        <input type="email" name="email" id="email" class="form-control" placeholder="Enter Your Email" aria-describedby="helpId">
                    </div>
                    <div class="form-group">
                        <label for="">password:</label>
                        <input type="password" name="password" id="password" class="form-control" placeholder="Enter Password" aria-describedby="helpId">
                    </div>
                    <div class="form-group">
                        <label for="forConfirmPassword">Confirm Password</label>
                        <input type="password" name="cpassword" id="cpassword" class="form-control" placeholder="Enter Confirm Password" aria-describedby="helpId">
                    </div>
                    <input type="submit" class="btn btn-primary" value="SignUp" id="subbtn" onclick="myFunction()">
                </form>

            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            </div>
            <?php echo json_encode($_POST);
            // echo $_POST['email'];
            if ($_SERVER['REQUEST_METHOD'] == 'POST') 
                $username = $_POST['username'];
                $email = $_POST['email'];
                $password = $_POST['password'];
                $cpassword = $_POST['cpassword'];
                echo $username;
                if ($password == $cpassword) 
                    //code
                 else
                    echo '<div class="alert alert-danger" role="alert">
<strong>danger</strong>
</div>';
             ?>
        </div>

script.js


function myFunction() 
  console.log(window.location.href);
  $('form').on('submit', function (event) 
    $.ajax(
      type: 'POST',
      url: 'includes/signupmodal.php',
      data: $('form#signupForm').serialize(),
      success: function () 
        data = $('form#signupForm').serialize();
        console.log(data);
      ,
    );
    event.preventDefault();
  );

我想在不加载页面的情况下使用 ajax 提交我的数据,所以请告诉我哪里错了

【问题讨论】:

您遇到了什么问题? 当我提交表单时,我的 php 不会获取我通过 ajax 发送的数据 是否由于默认表单提交而重新加载页面?如果不是 - 检查浏览器开发工具网络中的实际请求,以查看发送的内容是预期的内容、请求状态、响应等。您需要将其缩小到更具体的代码部分是否有效。您没有提供足够的调试细节 在开发工具中的状态是 200 ok 并且所有的输入也都在那里我猜我的 PHP 代码有一些问题但是当我使用正常的方法来放置数据时我的 PHP 代码运行完美 【参考方案1】:

您仅在单击提交按钮时才运行myFunction(),到那时添加 submit 事件侦听器为时已晚。

我建议你在文档准备好后添加你的监听器。

从您的提交按钮中删除 onclick="myFunction()" 并将其添加到您的脚本中

jQuery(function() 
  myFunction() // executes when the document has completely loaded
)

// or even just
// jQuery(myFunction)

见https://api.jquery.com/jquery/#jQuery3

【讨论】:

有趣的是,实际上还不算太晚,但如果多次使用提交按钮,则有可能添加多个侦听器。 jsfiddle.net/fv27a539 @charlietfl 非常有趣。老实说,在添加新的事件侦听器之前,我会认为提交事件会顺利进行 我也不确定,因为我几乎从不使用按钮单击表单,但出于好奇决定对其进行测试。有点道理,在点击事件完成之前添加监听器

以上是关于使用ajax将表单提交给php而不刷新页面的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用 Ajax 提交表单而不刷新页面

使用Jquery时无法读取数据库,Ajax提交表单而不刷新页面

ajax中的表单提交而不刷新整个页面只刷新ATG中的特定div标签

php如何避免刷新页面重复提交

将数据从下拉菜单提交到mysql而不刷新页面

提交表单并刷新产品 div 而不刷新页面