Load More Posts Button - AJAX

时间:2020-05-10 作者:trunks

我正在尝试将Ajax添加到我的主题中,以便动态加载我的帖子。下面的代码可以工作,但由于某种原因,当我使用另一个div包装触发加载的按钮时,它什么都不做。

完整代码:https://pastebin.com/8DhmC32R

JS公司

jQuery(function($){ 
    $(\'.loadmore\').click(function(){

        var button = $(this),
            data = {
            \'action\': \'loadmore\',
            \'query\': loadmore_params.posts, 
            \'page\' : loadmore_params.current_page
        };

        $.ajax({ 
            url : \'/wp-admin/admin-ajax.php\',
            data : data,
            type : \'POST\',
            beforeSend : function ( xhr ) {
                button.text(\'Loading...\'); 
                $(\'.loadmore\').addClass(\'newcomment\');
            },
            success : function( data ){
                if( data ) { 
                    button.text( \'More posts\' ).prev().before(data); 
                    $(\'.loadmore\').removeClass(\'newcomment\');
                    loadmore_params.current_page++;

                    if ( loadmore_params.current_page == loadmore_params.max_page ) 
                        button.remove(); 

                } else {
                    button.remove();
                }
            }
        });
    });
});
问题是:

<div><button class="loadmore">Load More</button></div>
它在没有div类的情况下工作

最后,这是我第一次使用管理ajax。前端的php用于我的方法安全吗?

非常感谢。

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

在trunks(OP)和我进行了一次聊天之后,下面是我们发现的问题。

在里面success 在AJAX中,有一系列连锁的指令。.text().prev().before();

一旦按钮被添加到div中,这本身就是一个问题,因为新帖子出现在按钮之前,但按钮正在更改,等等。

因此,这是解决问题的方法,分离所采取的操作,并以父div和按钮为目标(这只是AJAX的“成功”部分,其余部分都是有效的。)

success : function( data ){
    if( data ) {
        //this loads the new posts from the ajax callback
        $( \'.show-more\' ).prev().before(data);
        //this modifies the button
        button.text( \'More posts\' ); 
        $(\'.loadmore\').removeClass(\'newcomment\');
        loadmore_params.current_page++;
        if ( loadmore_params.current_page == loadmore_params.max_page ) 
        button.remove(); 
    } else {
        button.remove();
    }
}