当AJAX分页模板内的Echo跟随AJAX按钮不起作用时?

时间:2019-02-22 作者:Adham Mohamed

好的,这次我会尽量说清楚,我真的需要你们的帮助。

我正在使用一个与Ajax一起工作的插件来创建一个follow按钮,让我们的用户互相关注。

我把follow按钮放在任何需要用户这样跟踪其他用户的地方echo pwuf_get_follow_unfollow_links( //user id here );

我面临的问题是,如果我在任何Ajax分页模板中添加了此echo函数,无论是Ajax分页后还是用户列表中的Ajax分页,下面的按钮都不起作用,并且在单击时找不到用户id!

但在我将更多内容加载到第二页之前,他肯定可以在第一页找到用户id!

e、 g:如果我有一个像这样的Ajax分页,并且试图在这个Ajax分页中回显follow按钮功能,但不起作用!?

add_action(\'wp_ajax_loadmore_by_ajax\', \'loadmore_by_ajax_callback\');
add_action(\'wp_ajax_nopriv_loadmore_by_ajax\', \'loadmore_by_ajax_callback\');

function loadmore_by_ajax_callback()  {
   //do something

   //echoing follow button
    echo pwuf_get_follow_unfollow_links( //user id here );

}
我将在下面添加我所有的插件代码,我希望得到一些帮助来解决这个问题,谢谢你的时间。

跟随js公司

jQuery(document).ready(function($) {
    /*******************************
    follow / unfollow a user
    *******************************/
    $( \'.follow-links a\' ).on(\'click\', function(e) {
        e.preventDefault();

        var $this = $(this);

        if( pwuf_vars.logged_in != \'undefined\' && pwuf_vars.logged_in != \'true\' ) {
            alert( pwuf_vars.login_required );
            return;
        }

        var data      = {
            action:    $this.hasClass(\'follow\') ? \'follow\' : \'unfollow\',
            user_id:   $this.data(\'user-id\'),
            follow_id: $this.data(\'follow-id\'),
            nonce:     pwuf_vars.nonce
        };

        $this.closest(\'.follow-links\').find(\'img.pwuf-ajax\').show();

        $.post( pwuf_vars.ajaxurl, data, function ( response ) {
            if ( response == \'success\' ) {
                if ( $this.hasClass( \'follow\' ) ) {;
                    $this.removeClass( \'follow\' ).addClass( \'unfollow\' );
                    $this.find( \'span\' ).text( \'Unfollow\' );
                } else {;
                    $this.removeClass( \'unfollow\' ).addClass( \'follow\' );
                    $this.find( \'span\' ).text( \'Follow\' );
                }
            } else {
                alert( pwuf_vars.processing_error );
            }
            $this.closest(\'.follow-links\').find(\'img.pwuf-ajax\').hide();
        });
    });
});
行动。php

<?php

/**
 * Ajax Actions
 *
 * @package     User Following System
 * @subpackage  Ajax Actions
 * @copyright   Copyright (c) 2012, Pippin Williamson
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.0
*/


/**
 * Processes the ajax request to follow a user
 *
 * @access      private
 * @since       1.0
 * @return      void
 */

function pwuf_process_new_follow() {

    if ( isset( $_POST[\'user_id\'] ) && isset( $_POST[\'follow_id\'] ) ) {
        if( pwuf_follow_user( absint( $_POST[\'user_id\'] ), absint( $_POST[\'follow_id\'] ) ) ) {
            echo \'success\';
        } else {
            echo \'failed\';
        }
    }
    die();
}
add_action(\'wp_ajax_follow\', \'pwuf_process_new_follow\');

/**
 * Processes the ajax request to unfollow a user
 *
 * @access      private
 * @since       1.0
 * @return      void
 */

function pwuf_process_unfollow() {

    if ( isset( $_POST[\'user_id\'] ) && isset( $_POST[\'follow_id\'] ) ) {
        if( pwuf_unfollow_user( absint( $_POST[\'user_id\'] ), absint( $_POST[\'follow_id\'] ) ) ) {
            echo \'success\';
        } else {
            echo \'failed\';
        }
    }
    die();
}
add_action(\'wp_ajax_unfollow\', \'pwuf_process_unfollow\');
显示功能。php

<?php
/**
 * Retrieves the follow / unfollow links
 *
 * @access      public
 * @since       1.0
 * @param       int $user_id - the ID of the user to display follow / unfollow links for
 * @return      string
 */

function pwuf_get_follow_unfollow_links( $follow_id = null ) {

    global $user_ID;

    if( empty( $follow_id ) )
        return;

    if ( $follow_id == $user_ID )
        return;

    ob_start(); ?>
    <div class="follow-links">
<?php
if ( pwuf_is_following( $user_ID, $follow_id ) ) {
    $classes = "unfollow";
    $text = "Following";
} else {
    $classes = "follow";
    $text = "Follow";
}
?>

<span><a href="#" class="<?php echo $classes; ?>" data-user-id="<?php echo $user_ID; ?>" data-follow-id="<?php echo $follow_id; ?>"><span><?php echo $text; ?></span></a></span>
<img src="<?php echo PWUF_FOLLOW_URL; ?>/images/loading.svg" class="pwuf-ajax" style="display:none;"/>
    </div>
    <?php
    return ob_get_clean();

}
遵循功能。php

<?php

/**
 * Follow Functions
 *
 * @package     User Following System
 * @subpackage  Follow Functions
 * @copyright   Copyright (c) 2012, Pippin Williamson
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.0
 */




/**
 * Retrieves all users that the specified user follows
 *
 * Gets all users that $user_id followers
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to retrieve following for
 * @return      array
 */

function pwuf_get_following( $user_id = 0 ) {

    if ( empty( $user_id ) ) {
        $user_id = get_current_user_id();
    }

    $following = get_user_meta( $user_id, \'_pwuf_following\', true );

    if ( empty( $following ) ) {

    return;

    }
    return (array) apply_filters( \'pwuf_get_following\', $following, $user_id );
}


/**
 * Retrieves users that follow a specified user
 *
 * Gets all users following $user_id
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to retrieve followers for
 * @return      array
 */

function pwuf_get_followers( $user_id = 0 ) {

    if ( empty( $user_id ) ) {
        $user_id = get_current_user_id();
    }

    $followers = get_user_meta( $user_id, \'_pwuf_followers\', true );

    if ( empty( $followers ) ) {

    return;

    }
    return (array) apply_filters( \'pwuf_get_followers\', $followers, $user_id );
}



/**
 * Follow a user
 *
 * Makes a user follow another user
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id        - the ID of the user that is doing the following
 * @param   int $user_to_follow - the ID of the user that is being followed
 * @return      bool
 */

function pwuf_follow_user( $user_id, $user_to_follow ) {

    $following = pwuf_get_following( $user_id );

    if ( $following && is_array( $following ) ) {
        $following[] = $user_to_follow;
    } else {
        $following = array();
        $following[] = $user_to_follow;
    }

    // retrieve the IDs of all users who are following $user_to_follow
    $followers = pwuf_get_followers( $user_to_follow );

    if ( $followers && is_array( $followers ) ) {
        $followers[] = $user_id;
    } else {
        $followers = array();
        $followers[] = $user_id;
    }

    do_action( \'pwuf_pre_follow_user\', $user_id, $user_to_follow );

    // update the IDs that this user is following
    $followed = update_user_meta( $user_id, \'_pwuf_following\', $following );

    // update the IDs that follow $user_id
    $followers = update_user_meta( $user_to_follow, \'_pwuf_followers\', $followers );

    // increase the followers count
    $followed_count = pwuf_increase_followed_by_count( $user_to_follow ) ;

    if ( $followed ) {

        do_action( \'pwuf_post_follow_user\', $user_id, $user_to_follow );

        return true;
    }
    return false;
}



/**
 * Unfollow a user
 *
 * Makes a user unfollow another user
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id       - the ID of the user that is doing the unfollowing
 * @param   int $unfollow_user - the ID of the user that is being unfollowed
 * @return      bool
 */

function pwuf_unfollow_user( $user_id, $unfollow_user ) {

    do_action( \'pwuf_pre_unfollow_user\', $user_id, $unfollow_user );

    // get all IDs that $user_id follows
    $following = pwuf_get_following( $user_id );

    if ( is_array( $following ) && in_array( $unfollow_user, $following ) ) {

        $modified = false;

        foreach ( $following as $key => $follow ) {
            if ( $follow == $unfollow_user ) {
                unset( $following[$key] );
                $modified = true;
            }
        }

        if ( $modified ) {
            if ( update_user_meta( $user_id, \'_pwuf_following\', $following ) ) {
                pwuf_decrease_followed_by_count( $unfollow_user );
            }
        }

    }

    // get all IDs that follow the user we have just unfollowed so that we can remove $user_id
    $followers = pwuf_get_followers( $unfollow_user );

    if ( is_array( $followers ) && in_array( $user_id, $followers ) ) {

        $modified = false;

        foreach ( $followers as $key => $follower ) {
            if ( $follower == $user_id ) {
                unset( $followers[$key] );
                $modified = true;
            }
        }

        if ( $modified ) {
            update_user_meta( $unfollow_user, \'_pwuf_followers\', $followers );
        }

    }

    if ( $modified ) {
        do_action( \'pwuf_post_unfollow_user\', $user_id, $unfollow_user );
        return true;
    }

    return false;
}



/**
 * Retrieve following count
 *
 * Gets the total number of users that the specified user is following
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to retrieve a count for
 * @return      int
 * @param  int|string|WP_User $user_id User ID or object.
 * @return bool                        Whether the user exists
 */

function pwuf_get_following_count( $user_id = 0 ) {

    if ( empty( $user_id ) ) {
        $user_id = get_current_user_id();
    }

    $following = pwuf_get_following( $user_id );

    $count = 0;

    if ( $following ) {
        $count = count( $following );
    }

    return (int) apply_filters( \'pwuf_get_following_count\', $count, $user_id );
}


/**
 * Retrieve follower count
 *
 * Gets the total number of users that are following the specified user
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to retrieve a count for
 * @return      int
 */

function pwuf_get_follower_count( $user_id = 0 ) {

    if ( empty( $user_id ) ) {
        $user_id = get_current_user_id();
    }

    $followed_count = get_user_meta( $user_id, \'_pwuf_followed_by_count\', true );

    $count = 0;

    if ( $followed_count ) {
        $count = $followed_count;
    }

    return (int) apply_filters( \'pwuf_get_follower_count\', $count, $user_id );
}



/**
 * Increase follower count
 *
 * Increments the total count for how many users a specified user is followed by
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to increease the count for
 * @return      int
 */

function pwuf_increase_followed_by_count( $user_id = 0 ) {

    do_action( \'pwuf_pre_increase_followed_count\', $user_id );

    $followed_count = pwuf_get_follower_count( $user_id );

    if ( $followed_count !== false ) {

        $new_followed_count = update_user_meta( $user_id, \'_pwuf_followed_by_count\', $followed_count + 1 );

    } else {

        $new_followed_count = update_user_meta( $user_id, \'_pwuf_followed_by_count\', 1 );

    }

    do_action( \'pwuf_post_increase_followed_count\', $user_id );

    return $new_followed_count;
}


/**
 * Decrease follower count
 *
 * Decrements the total count for how many users a specified user is followed by
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id - the ID of the user to decrease the count for
 * @return      int
 */

function pwuf_decrease_followed_by_count( $user_id ) {

    do_action( \'pwuf_pre_decrease_followed_count\', $user_id );

    $followed_count = pwuf_get_follower_count( $user_id );

    if ( $followed_count ) {

        $count = update_user_meta( $user_id, \'_pwuf_followed_by_count\', ( $followed_count - 1 ) );

        do_action( \'pwuf_post_increase_followed_count\', $user_id );

    }
    return $count;
}


/**
 * Check if a user is following another
 *
 * Increments the total count for how many users a specified user is followed by
 *
 * @access      private
 * @since       1.0
 * @param   int $user_id       - the ID of the user doing the following
 * @param   int $followed_user - the ID of the user to check if being followed by $user_id
 * @return      int
 */

function pwuf_is_following( $user_id, $followed_user ) {

    $following = pwuf_get_following( $user_id );

    $ret = false; // is not following by default

    if ( is_array( $following ) && in_array( $followed_user, $following ) ) {
        $ret = true; // is following
    }

    return $ret;

}
脚本。php

<?php

/**
 * Loads plugin scripts
 *
 * @access      private
 * @since       1.0
 * @return      void
*/

function pwuf_load_scripts() {
    wp_enqueue_script( \'pwuf-follow\', PWUF_FOLLOW_URL . \'js/follow.js\', array( \'jquery\' ) );
    wp_localize_script( \'pwuf-follow\', \'pwuf_vars\', array(
        \'processing_error\' => __( \'There was a problem processing your request.\', \'pwuf\' ),
        \'login_required\'   => __( \'Oops, you must be logged-in to follow users.\', \'pwuf\' ),
        \'logged_in\'        => is_user_logged_in() ? \'true\' : \'false\',
        \'ajaxurl\'          => admin_url( \'admin-ajax.php\' ),
        \'nonce\'            => wp_create_nonce( \'follow_nonce\' )
    ) );
}
add_action( \'wp_enqueue_scripts\', \'pwuf_load_scripts\' );

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

我认为,如果您更改jQuery,请单击操作选择器来处理event delegation 以下按钮在ajax添加后应该可以使用。

// Change this
$( \'.follow-links a\' ).on(\'click\', function(e) {
// to this
$( \'.some-parent-not-added-by-ajax\' ).on(\'click\', \'.follow-links a\', function(e) {
// or as last resort
$( document ).on(\'click\', \'.follow-links a\', function(e) {

相关推荐

JQuery AJAX PHP函数调用返回[对象对象]

我想使用jQuery Ajax重新加载页面。我有下面的代码,但是,它不工作,正在返回错误[object Object]这只是一个简单的语法问题,还是我的整个逻辑都有问题?它在没有Javascript的情况下工作得很好,但我认为使用jQuery Ajax的UI更直观。functions.php//enqueue scripts function my_theme_enqueue_scripts() { wp_enqueue_script(\'jquery-ui\', \'https