在AJAX数据库更新后更改按钮文本

时间:2018-04-26 作者:Ante Medic

我正在努力学习严肃的php WP开发。我的目标是在点击按钮时标记文章完成/阅读。我发现了这个很棒的ajax教程插件。以下是tutorial, 对于plugin. 我成功地编辑了插件表单。单击它会检查数组中是否已经存在该id,如果已经存在,则会从数组中删除该元素。如果数组中没有id,或者数组为空,则会将post id添加到数组中。之后,将数组更新为db。

以下是按钮的代码,添加在帖子内容之后:

public function rml_button( $content ) {

    $rml_post_id = get_the_id();

    // Show read me later link only when user is logged in
    if( is_user_logged_in() && get_post_type() == post ) {

        if( get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true ) !== null ) {
        $value = get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true );
        }

        if( $value )  {

            if (in_array($rml_post_id, $value)) {

                $html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">DONE</a>\';
                $content .= $html;

            }

            else {
                $html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">MARK AS DONE</a>\';
                $content .= $html;
            }
        }   

        else {
            $html .= \'<a href="#" class="rml_bttn" data-id="\' . get_the_id() . \'">MARK AS DONE</a>\';
            $content .= $html;
        }   


    }
    return $content;

} 
以下是更新数据库的代码:

public function read_me_later() {

    check_ajax_referer( \'rml-nonce\', \'security\' );
    $rml_post_id = $_POST[\'post_id\']; 
    $echo = array();

    if( get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true ) !== null ) {
        $value = get_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', true );
    }

    if( $value )  {

        if (in_array($rml_post_id, $value)) {

            foreach (array_keys($value, $rml_post_id, true) as $key) {
                unset($value[$key]);

            }
            $echo = $value;

        }

        else {
            $echo = $value;
            array_push( $echo, $rml_post_id );
        }
    }   

    else {
        $echo = array( $rml_post_id );
    }



    update_user_meta( wp_get_current_user()->ID, \'rml_post_ids\', $echo );

    // Always die in functions echoing Ajax content     

    die();



}
最后,这里是。ajax调用的js:

jQuery(document).ready( function(){ 

jQuery(\'#content\').on(\'click\', \'a.rml_bttn\', function(e) { 
    e.preventDefault();

    var rml_post_id = jQuery(this).data( \'id\' );

    jQuery.ajax({
        url : rml_obj.ajax_url,
        type : \'post\',
        data : {
            action : \'read_me_later\',
            security : rml_obj.check_nonce,
            post_id : rml_post_id
        },
        success : function( response ) {
            jQuery(\'.rml_contents\').html(response);
        }
    });

    //jQuery(this).hide();
}); 

});
我不明白的是,如果这是一个愚蠢的问题,我很抱歉,那就是如何在ajax之后更改按钮文本?如何调用此函数rml_button(), 在…内read_me_later() 因此,按钮文本将在db更新后更改。

非常感谢。

1 个回复
SO网友:Clemens Tolboom

您只需使用$a.text(\'abc\') 在jQuery部分。我对class 在的jQuery部分How to securely add an Ajax button to an admin page

jQuery(\'#content\').on(\'click\', \'a.rml_bttn\', function(e) { 
    e.preventDefault();
    var $a = jQuery(this);

    var rml_post_id = $a.data( \'id\' );

    jQuery.ajax({
        url : rml_obj.ajax_url,
        type : \'post\',
        data : {
            action : \'read_me_later\',
            security : rml_obj.check_nonce,
            post_id : rml_post_id
        },
        success : function( response ) {
            jQuery(\'.rml_contents\').html(response);
            $a.text(\'Changed\');
        }
    });

    //jQuery(this).hide();
}); 

});

结束

相关推荐

AJAX-不带插件的getText

如果不使用任何插件,您将如何设置AJAX调用中返回的正确语言?只需将WPLANG定义为适当的语言环境,页面中的所有其他字符串都可以正常工作。示例:function lpml_get_quiz_result_callback() { // do plenty of stuff before this // this is always returned in original english language, even if I setloc