Javascript WordPress中的AJAX评论

Javascript WordPress中的AJAX评论,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,我试图让AJAX评论在WordPress中工作。到目前为止,我已经编写了一个PHP处理程序和一个脚本 我的脚本(修改自): 我的PHP处理程序,ajaxify_comments(),连接到comment_post,在将注释保存到数据库后立即触发。该函数获取注释文本并向我的AJAX脚本返回响应(注释文本)。如果一切顺利,屏幕上将显示注释文本。如果失败,将显示一条错误消息 我的问题 如果我提交评论,评论将保存到数据库中,评论文本将显示在屏幕上。这个钻头有效!我的问题是,如果我在没有刷新页面的情况下发

我试图让AJAX评论在WordPress中工作。到目前为止,我已经编写了一个PHP处理程序和一个脚本

我的脚本(修改自):

我的PHP处理程序,
ajaxify_comments()
,连接到
comment_post
,在将注释保存到数据库后立即触发。该函数获取注释文本并向我的AJAX脚本返回响应(注释文本)。如果一切顺利,屏幕上将显示注释文本。如果失败,将显示一条错误消息

我的问题

如果我提交评论,评论将保存到数据库中,评论文本将显示在屏幕上。这个钻头有效!我的问题是,如果我在没有刷新页面的情况下发表第二条评论,我总是会得到“哦,发生了错误”。我做错了什么

更新

在@adeneo建议使用内置AJAX钩子的WordPress之后,我想出了一个新的脚本和PHP处理程序

脚本:

jQuery(document).ready(function($) {

    var path = ac.path;
    var security = ac.security;
    var ajax_url = ac.ajax_url;

    var commentform = $('#commentform');
    commentform.prepend('<div id="comment-status"></div>');
    var statusdiv = $('#comment-status');

    commentform.submit(function(){

        $.ajax({
            type: 'POST',
            url: ajax_url,
            dataType: 'JSON',
            data: {
                'action': 'ac',
                'security': security
            },
            success:function(data) {
                statusdiv.html(data);
                $('#commentform #comment').val('');
            },
            error: function(data){
                statusdiv.html('<p class="ajax-error">Oops, an AJAX error occured</p>');
            }
        });
        return false;

    });
});
为了完整起见,值得让您知道我还有:

wp_enqueue_script( 'ac-script', plugins_url( '/js/script.js', __FILE__ ), array( 'jquery' ), 1.0, true );
        $path = get_bloginfo( 'stylesheet_directory' );

        // set the nonce security check
        $ajax_nonce = wp_create_nonce( 'ajax_ac_nonce' );

        wp_localize_script(
            'ac-script',
            'ac',
            array(
                'ajax_url' => admin_url( 'admin-ajax.php' ),
                'path'  => $path,
                'security' => $ajax_nonce,
            )
        );

我现在的问题是:如何使提交的评论数据可供我的PHP处理程序使用?我猜我需要手动将注释数据保存到数据库中?我首先需要在PHP函数中提供这些数据,但不确定如何做到这一点?

这不是一个真正的答案,但您应该使用内置的ajax挂钩,因为wordpress有一个专用的URL和ajax请求挂钩。您使用的是akismet吗?@adeneo不确定我该怎么做?@enapupe我知道我需要使用WP nonce。这就是你问的原因吗?你不必使用nonce,但你应该,你可以看到ajax是如何在wordpress插件中使用的,这就是你应该做的,因为它通常比你自己做的更容易。
jQuery(document).ready(function($) {

    var path = ac.path;
    var security = ac.security;
    var ajax_url = ac.ajax_url;

    var commentform = $('#commentform');
    commentform.prepend('<div id="comment-status"></div>');
    var statusdiv = $('#comment-status');

    commentform.submit(function(){

        $.ajax({
            type: 'POST',
            url: ajax_url,
            dataType: 'JSON',
            data: {
                'action': 'ac',
                'security': security
            },
            success:function(data) {
                statusdiv.html(data);
                $('#commentform #comment').val('');
            },
            error: function(data){
                statusdiv.html('<p class="ajax-error">Oops, an AJAX error occured</p>');
            }
        });
        return false;

    });
});
function ajaxify_comments() {

    check_ajax_referer( 'ajax_ac_nonce', 'security' );

    $response = 'blah';
    echo json_encode( $response );

    die();
}
add_action( 'wp_ajax_ac', 'ajaxify_comments' );
wp_enqueue_script( 'ac-script', plugins_url( '/js/script.js', __FILE__ ), array( 'jquery' ), 1.0, true );
        $path = get_bloginfo( 'stylesheet_directory' );

        // set the nonce security check
        $ajax_nonce = wp_create_nonce( 'ajax_ac_nonce' );

        wp_localize_script(
            'ac-script',
            'ac',
            array(
                'ajax_url' => admin_url( 'admin-ajax.php' ),
                'path'  => $path,
                'security' => $ajax_nonce,
            )
        );