【问题标题】:AJAX not preventing redirection to PHP pageAJAX 不会阻止重定向到 PHP 页面
【发布时间】:2021-07-31 17:09:58
【问题描述】:

在 AJAX 的帮助下,我一直在尝试防止在提交表单后自动重定向到空白 PHP 页面,但我没有管理。提交到表单的数据正在输入到 MySQL 表中,但单击提交后,我总是被重定向到空白的 insert.php 页面。 这是 HTML 表单:

            <tr>
                <td></td>
                <form class = "ajax" action = "insert.php" method="POST">
                    <td><input type="text" class = "inputs" name = "dcs" id = "dcs"/></td>
                    <td><input type="text" class = "inputs" name = "qty" id = "qty"/></td>
                    <td><input type="text" class = "inputs" name = "rate" id = "avg"/></td><td></td>
                    <td><div style = "position: relative;"><input type="submit" onclick="add_new_entry();" id = "submit"/></div></td>
                </form>
                <td></td>
            <tr>  

这里是 jQuery 函数:

        $(document).ready(function() {
        
            $('form.ajax').submit(function(event) {
                event.preventDefault();
                var that = $(this),
                    url = that.attr('action'),
                    type = that.attr('method'),
                    data = {};

                that.find('[name]').each(function(index, value) {
                    var that = $(this),
                        name = that.attr('name'),
                        value = that.val();

                    data[name] = value;
                });

                $.ajax({
                    url: url,
                    type: type,
                    data: data,
                    success = function(response) {
                        alert(response);
                    }
                });
                return false;

            });

        });

这里是insert.php

<?php

include "db_connect.php";

$code = 4;
$dcs =  mysqli_real_escape_string($conn, $_POST['dcs']);
$qty = mysqli_real_escape_string($conn, $_POST['qty']);
$rate =  mysqli_real_escape_string($conn, $_POST['rate']);
$total = $qty * $rate;

$sql = "INSERT INTO entries  VALUES ('$code',
            '$dcs','$qty','$rate','$total');";

// $conn is the connection
mysqli_query($conn, $sql)

mysqli_close($conn);

?>

请让我知道我应该做的更改,以便在提交表单后我不会被重定向到 PHP 页面。

如果我应该提供任何其他代码 sn-ps,请告诉我。

非常感谢。

【问题讨论】:

  • 这能回答你的问题吗? Prevent redirect after form is submitted
  • add_new_entry(); 是做什么的?此外,获取所有输入的更简单方法是只执行 data = that.serialize(); 而不是您的 that.find(....) 函数。
  • 检查您的浏览器控制台,我确定您那里有一些错误消息。你有一些语法错误,这可能会阻止你的 JS 被执行,并且会在那里“正常”提交表单。 success = function(response) 应该是 success: function(response)
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • @MagnusEriksson 非常感谢,解决我的问题需要您的两个建议!

标签: php html jquery ajax


【解决方案1】:

所以有一个巧妙的技巧,您可以在 onclick 功能上添加return false; 以防止页面提交。我认为这里的问题是你在阻止它提交之前已经提交了表单,否则你可以做的是在提交部分之前创建一个点击事件,这需要阻止表单的提交或者使用 jquery $.post en 而不是提交事件

【讨论】:

    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2013-04-05
    • 2012-11-22
    • 2017-10-26
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多