【问题标题】:Ajax post to database doesn't post anythingAjax 发布到数据库不会发布任何内容
【发布时间】:2014-11-15 19:27:48
【问题描述】:

我知道以前有人问过这个问题,但我似乎可以找到解决我的问题的解决方案。我正在尝试使用 Ajax 帖子将数据发布到 Mysql 数据库

HTML

<form action="" method="post">
    <input type="text" id="message" name="message">
    <<input type="submit" value="Send" id="submit">
</form>

Ajax 帖子

$(document).ready(function(){
    $("#submit").click(function(){
        var message = $("#message").val();
        var data = "message=" + message;
        console.log(data);
        if(message != ''){
            console.log(data);
            $.ajax({
                type: "POST",
                url: "classes/messages.php",
                data: data,
                succes: function(){
                    alert("succes");
                }
            });
        }
        return false;
    });
});

PHP 代码

class messages{
    function getMessages(){
        $con = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
        $message = $_POST['message'];

        mysqli_query($con, "INSERT INTO messages(message, time, user_id)
                    VALUES('$message', 'now()', '12')")or die(mysqli_error($con));
        mysqli_close($con);
    }
}

$messages = new Messages();
$messages->getMessages();    

每次我提交表单时都没有发生任何事情,甚至没有出现 php 错误。我检查了 Ajax 帖子,并且两个 console.logs 都返回了正确的值,所以我认为该变量是可以访问的。

我还检查了php函数是否被执行,是这样的。

【问题讨论】:

  • 尝试从开发人员工具或 Firebug 的网络选项卡中检查 XHR。你可以在那里找到你想要的所有信息:标题、发布的数据、接收的数据等。
  • 在 ajax 请求正文中放置一个错误处理程序(以防万一)。还;你应该检查你的代码是否有 SQL 注入。

标签: php mysql ajax post


【解决方案1】:

试试这个

    <html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    $(document).ready(function(){

        $("#submit").click(function(){
            var message = $("#message").val();
            var data = "message=" + message;
            console.log(data);
            if(message != ''){
                console.log(data);
                $.ajax({
                    type: "POST",
                url: "classes/messages.php",
                    data: data,
                    success: function(){
                        alert("succes");
                    }
                });
            }
            return false;
        });
    });
    </script>
    </head>
<body>
    <form action="" method="post">
        <input type="text" id="message" name="message">
        <input type="button" value="Send" id="submit">
    </form>
</body>
    </html>

<?php
class messages{
    function getMessages(){
        $con = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);
        $message = $_POST['message'];

        mysqli_query($con, "INSERT INTO messages(message, time, user_id)
                    VALUES('$message', 'now()', '12')")or die(mysqli_error($con));
        mysqli_close($con);
    }
}

$messages = new Messages();
$messages->getMessages();    

基本上我从 `'submit' 更改了 input type='button' 。由于它是一个提交按钮,因此从未完成 ajax 调用,而是提交了表单。

【讨论】:

  • 谢谢,我认为输入类型不会有这么大的不同
  • 奇怪的是,数据被post到数据库,但是没有执行成功函数,你知道为什么吗?
  • @user3164891 您输入错误,输入的是“succes”而不是“success”。我在回答中更正了它
  • 啊,我一定忽略了这一点。我习惯于像成功一样输入它,因为它在我的语言中是这样拼写的;)
【解决方案2】:

你可以试试这个速记方法:

var message = "message=" + $("#message").val();
$("#submit").on("click", function(ev)){
    $.post("classes/messages.php", {message: message}, 'json').done(function (data, textStatus, jqXHR) {
        console.log("succes");       
    }).fail(function () {
        console.log("Fail");
        return false;
    }).always();
}

使用on 比仅仅触发选择器本身的功能更好并且推荐使用。

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2011-05-13
    • 2010-12-16
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多