Jquery ajax通过PHP文件将表单数据插入数据库前需要第二次点击

jquery ajax requires second click before form data is inserted into database through php file

本文关键字:数据库 第二次 插入 数据 通过 ajax PHP 文件 表单 Jquery      更新时间:2023-09-26

我已经看过与此相关的其他问题,我无法找到解决我的问题的答案。

当我点击按钮发布表单数据到php文件,它是验证,如果它通过验证,然后把它放在数据库中,它做验证ok,并给出错误,如果有任何在第一次点击,但如果没有错误,它不做任何事情,需要第二次点击,然后把数据放入数据库?

两个文档我都试过了。准备好了,#项目。点击并放置#项。在文档中单击。现成的功能,没有一个能解决问题。

下面是处理这个问题的jquery和php,如果有人能给我指出正确的方向,我将非常感激。

Jquery

$("#postcomment").click(function() {
    var Name = $("input#name").val();
    var Comment = $("textarea#comment").val()
    $("form").submit(function(){
        $.ajax({
        url: 'comment.php',
        data: { name: Name, comment: Comment}, 
        type: 'POST'
        });
    });
});
PHP

$_SESSION['name'] = $_POST['name'];
$_SESSION['comment'] = $_POST['comment'];
$ipaddy = $_SERVER['REMOTE_ADDR'];
if(Input::exists()){
    $name  = trim (escape($_POST['name']));
    $comment = trim (escape($_POST['comment']));
    $validate = new Validate();
    $validation = $validate->check($_POST, array(
        'name' => array(
            'required' => true,
            'min' => 5,
            'max' => 50),
        'comment' => array(
            'required' => true,
            'min' => 10,
            'max' => 200)
    ));
    if($validation->passed()){
        $insCom = "INSERT INTO comments (name, comment, commentdate, ip) VALUES ('$name', '$comment', NOW(), '$ipaddy')";
        if($insCom = $db->query($insCom)){
            Session::flash('home', 'successfull');
                Redirect::to('test.php');
        } else {
            Session::flash('home', 'unsuccessfull');
                Redirect::to('test.php');
        }
    }else{
        foreach($validate->errors() as $error){
            Session::flash('home', $error, '<br>');
                Redirect::to('test.php');
        }
    }        
}
表单@Yorick 的HTML
<form id="commentForm" name="commentForm" action="" method="post">
    <label for="name">Name:</label><br />
    <input type="text" id="name" name="name" placeholder="name"/>
        <div style="height:30px"></div>
    <label for="name">Comment:</label><br />
    <textarea id="comment" name="comment" placeholder="comment" rows="5" cols="60" maxlength="200"></textarea>
        <br />
    <div id="btm">
        <button id="postcomment">Post Comment</button>
        <div id="sflash">
        <?php
        if(Session::exists('home')) {
            echo '<p>', Session::flash('home'), '</p>';
        }
        ?>
        </div>
    </div>
</form>

删除

$("form").submit(function(){
}

a的默认类型是submit,所以当你点击它时,你正在处理点击事件并执行ajax调用,然后浏览器随后为你提交表单。

如果您查看浏览器调试控制台上的网络跟踪,您将看到以下内容:

设置type="button"来避免这种情况。还可以从.click()处理程序返回false,以在完全处理单击时阻止单击传播。

$("form")实际上是不需要的,只是引起另一个表单提交。

你肯定需要在$(document).ready(…)构造中安装你的。click()处理程序