在WordPress中使用AJAX保存到数据库无法正常工作

Using AJAX to save to database in WordPress not working correctly

提问人:Darth Mikey D 提问时间:10/27/2023 更新时间:10/28/2023 访问量:24

问:

我正在创建一个事件插件,每个事件都有一个评论部分。我能够保存每条评论,但是我现在遇到的问题是我被带到了空白的admin-ajax.php。提交表单后,我想保持在同一页面上并加载结果。我知道通过将表单操作设置为admin-ajax.php,它将最终出现在该页面上,但是我已经尝试了通过Google搜索找到的不同方法,这是我能够将其保存到数据库的唯一方法。我的代码如下。

形式

<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="comment_form">
    <textarea name="comment" id="comment" class="commentbox" rows="5" cols="120" required></textarea><br />
    <input type="hidden" name="eventid" id="eventid" value="<?php echo $id; ?>" />
    <input type="hidden" name="userid" id="userid" value="<?php echo $userid; ?>" />
    <input type="hidden" name="action" value="commentform">
    <button class="commentbtn">Add Comment</button>
</form>
<div id="response"></div> 

jQuery的

<script>
jQuery(function($){
    $('#commentform').submit(function(){
        var commentform = $('#commentform');
        $.ajax({
            url:commentform.attr('action'),
            data:commentform.serialize(), // form data
            type:commentform.attr('method'), // POST
            beforeSend:function(xhr){           
                commentform.find('button').text('Processing...');
            },
            success:function(data){                 
                commentform.find('button').text('Add Comment');
                $('#response').html(data); // insert data
            }
        });
        return false;
    });
});
</script>

PHP 函数

add_action('wp_ajax_commentform', 'comment_submit'); 
add_action('wp_ajax_nopriv_commentform', 'comment_submit'); 
function comment_submit() { 
    global $wpdb; 
    $eventid = $_POST["eventid"];
    $userid = $_POST["userid"]; 
    $comment = $_POST["comment"];
    date_default_timezone_set("America/New_York");
    $date = date('Y-m-d H:i:s');

    $inserttable = $wpdb->prefix . "event_comments";
    $data = array(
        'eventid' => $eventid,
        'userid' => $userid,
        'content' => $comment,
        'datesaved' => $date,
    );
    $wpdb->insert($inserttable, $data);

    die;
}
php jquery ajax wordpress

评论

0赞 disinfor 10/28/2023
你不需要表单操作,事实上,你不应该使用事件。请改用事件侦听器。设置类似以下内容 然后,如果“提交”成功,则更新评论表单。您可能需要在 AJAX POST 中添加错误。admin-ajax.phpsubmitcommentbtn$('.commentbtn').on('click', function(){... ajax stuff here ...});

答:

1赞 dcourt1 10/28/2023 #1

对不起,我不能发表评论。

读取您的代码,您要查找的元素不存在: 将 comment_form 替换为 commentform。

$('#commentform').submit(function(){
    var commentform = $('#commentform');

但您的 id 属性是 id=“**comment_form”>

<form  ...  id="comment_form">

评论

0赞 Darth Mikey D 10/28/2023
感谢您的回复。我纠正了这一点,但仍然有同样的问题。
0赞 Darth Mikey D 10/28/2023 #2

我想通了。我忘了添加event.preventDefault();停止加载表单。