简体   繁体   中英

jquery pagination for ajax data

I have having 3 tabs which I have written ajax in click function to get posts.

I have simplified my coding:

in document ready

$.ajax({
type : "GET",
url:"xxx",
data:{ method:'wire.get_posts', limit:'10', offset:'0', context:'all' },            
dataType:"json",
success:function(all_data) {
    $("#tabs-1").append(all_element);
}
});

And this is my pagination

//how much items per page to show
var show_per_page = 2; 
//getting the amount of elements inside content div
var number_of_items = $('#tabs-1').children().size();
//calculate the number of pages we are going to have
var number_of_pages = Math.ceil(number_of_items/show_per_page);

//set the value of our hidden input fields
$('#current_page').val(0);
$('#show_per_page').val(show_per_page);

//now when we got all we need for the navigation let's make it '

/* 
what are we going to have in the navigation?
- link to previous page
- links to specific pages
- link to next page
*/
var navigation_html = '<a class="previous_link"   
href="javascript:previous();">Prev</a>';
var current_link = 0;
while(number_of_pages > current_link){
navigation_html += '<a class="page_link" href="javascript:go_to_page(' + current_link   

+')" longdesc="' + current_link +'">'+ (current_link + 1) +'</a>';
current_link++;
}
navigation_html += '<a class="next_link" href="javascript:next();">Next</a>';

$('#page_navigation').html(navigation_html);

//add active_page class to the first page link
$('#page_navigation .page_link:first').addClass('active_page');

//hide all the elements inside content div
$('#tabs-1').children().css('display', 'none');

//and show the first n (show_per_page) elements
$('#tabs-1').children().slice(0, show_per_page).css('display', 'block');

//pagination functions
function previous(){

new_page = parseInt($('#current_page').val()) - 1;
//if there is an item before the current active link run the function
if($('.active_page').prev('.page_link').length==true){
go_to_page(new_page);
}

}

function next(){
new_page = parseInt($('#current_page').val()) + 1;
//if there is an item after the current active link run the function
if($('.active_page').next('.page_link').length==true){
go_to_page(new_page);
}

}
function go_to_page(page_num){
//get the number of items shown per page
var show_per_page = parseInt($('#show_per_page').val());

//get the element number where to start the slice from
start_from = page_num * show_per_page;

//get the element number where to end the slice
end_on = start_from + show_per_page;

//hide all children elements of content div, get specific items and show them
$('#tabs-1').children().css('display', 'none').slice(start_from, end_on).css('display', 
'block');

/*get the page link that has longdesc attribute of the current page and add active_page 
class to it
and remove that class from previously active page link*/
$('.page_link[longdesc=' + page_num 
+']').addClass('active_page').siblings('.active_page').removeClass('active_page');

//update the current page input field
$('#current_page').val(page_num);
}
//pagination functions

I append html element in ajax success

My pagination is working if it is static content

HTML:

<div id="tabs">
<ul>
<li><a id="ui-id-1" href="#tabs-1">All</a></li>
<li><a id="ui-id-2" href="#tabs-2">Mine</a></li>
<li><a id="ui-id-3" href="#tabs-3">Friends</a></li>
</ul>

<div id="tabs-1">
</div>

<div id="tabs-2">    
</div>

<div id="tabs-3">
</div>
</div>
<br>

<!-- An empty div which will be populated using jQuery --> 
<div id='page_navigation'></div>

As it stands, it seems that your "pagination code" is not called right after the success of your AJAX call : at the time it's executed, the data has not necessarily been transferred from your server. As a result, it's useless ; meanwhile with static content, the data is already in your #tabs-1 , thus it works.

As a remind, AJAX means Asynchronous Javascript and XML .

You should then wrap all your pagination code into the success method of your ajax call, so it'll paginate only when the data is retrieved.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM