AJAX在WordPress中发表评论

时间:2014-02-27 12:43:55

标签: javascript php jquery ajax wordpress

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

我的脚本(从here修改):

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

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

    commentform.submit(function(){
        //serialize and store form data in a variable
        var data=commentform.serialize();
        //Add a status message
        statusdiv.html('<p>Processing...</p>');
        //Extract action URL from commentform
        var formurl=commentform.attr('action');
        //Post Form with data
        $.ajax({
            type: 'POST',
            url: formurl,
            dataType: 'JSON',
            data: data,
            error: function(XMLHttpRequest, errorThrown)
                {
                    statusdiv.html('<p class="ajax-error" >Oops, an error occured</p>');
                },
            success: function(data)
                {
                    statusdiv.html(data);
                    $('#commentform #comment').val('');
                }
        });
        return false;
    });
});

我的PHP处理程序:

function ajaxify_comments( $comment_ID, $comment_status ) {

    $comment = get_comment( $comment_ID );

    $response = $comment->comment_content;
    echo json_encode( $response );

    die();
}
add_action( 'comment_post', 'ajaxify_comments', 20, 2 );

我的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;

    });
});

PHP处理程序

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,
            )
        );

我的问题现在变为:如何将提交的评论数据提供给我的PHP处理程序?我猜我需要手动将评论数据保存到数据库中?我首先需要在我的PHP函数中提供这些数据,但不知道该怎么做?

0 个答案:

没有答案