使用 codeigniter 和 jquery 进行 AJAX 分页
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18606960/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
AJAX pagination with codeigniter and jquery
提问by Beniamin Szabo
Can someone help me with a simple AJAX pagination in Codeigniter using JQuery? With the paginated list queryed from the database. I searched the web but all the exemples are very complex... Thank you in advance and sorry for my bad english...
有人可以帮助我使用 JQuery 在 Codeigniter 中进行简单的 AJAX 分页吗?使用从数据库中查询的分页列表。我在网上搜索过,但所有的例子都非常复杂......提前感谢你,并为我的英语不好而道歉......
回答by Girish Sinha
just use codeigniter pagination simple and use following code for pagination through jquery:
只需使用简单的codeigniter分页并使用以下代码通过jquery进行分页:
<script>
$(function(){
$("#pagination-div-id a").click(function(){
$.ajax({
type: "POST",
url: $(this).attr("href"),
data:"q=<?php echo $searchString; ?>",
success: function(res){
$("#containerid").html(res);
}
});
return false;
});
});
</script>
Here pagination div id is the id of pagination container and containerid is simple the container id where you showing the result.
这里分页 div id 是分页容器的 id,containerid 是简单的容器 id,您可以在其中显示结果。
回答by Waqas Hafeez
just use codeigniter pagination library and add the following function in the library after create links function
只需使用codeigniter分页库并在创建链接函数后在库中添加以下函数
function create_links_ajax()
{
// If our item count or per-page total is zero there is no need to continue.
if ($this->total_rows == 0 OR $this->per_page == 0)
{
return '';
}
// Calculate the total number of pages
$num_pages = ceil($this->total_rows / $this->per_page);
// Is there only one page? Hm... nothing more to do here then.
if ($num_pages == 1)
{
return '';
}
// Set the base page index for starting page number
if ($this->use_page_numbers)
{
$base_page = 1;
}
else
{
$base_page = 0;
}
// Determine the current page number.
$CI =& get_instance();
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
if ($CI->input->get($this->query_string_segment) != $base_page)
{
$this->cur_page = $CI->input->get($this->query_string_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
}
else
{
if ($CI->uri->segment($this->uri_segment) != $base_page)
{
$this->cur_page = $CI->uri->segment($this->uri_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
}
// Set current page to 1 if using page numbers instead of offset
if ($this->use_page_numbers AND $this->cur_page == 0)
{
$this->cur_page = $base_page;
}
$this->num_links = (int)$this->num_links;
if ($this->num_links < 1)
{
show_error('Your number of links must be a positive number.');
}
if ( ! is_numeric($this->cur_page))
{
$this->cur_page = $base_page;
}
// Is the page number beyond the result range?
// If so we show the last page
if ($this->use_page_numbers)
{
if ($this->cur_page > $num_pages)
{
$this->cur_page = $num_pages;
}
}
else
{
if ($this->cur_page > $this->total_rows)
{
$this->cur_page = ($num_pages - 1) * $this->per_page;
}
}
$uri_page_number = $this->cur_page;
if ( ! $this->use_page_numbers)
{
$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
}
// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
$end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
// Is pagination being used over GET or POST? If get, add a per_page query
// string. If post, add a trailing slash to the base URL if needed
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
$this->base_url = rtrim($this->base_url).'&'.$this->query_string_segment.'=';
}
else
{
$this->base_url = rtrim($this->base_url, '/') .'/';
}
// And here we go...
$output = '';
// Render the "First" link
if ($this->first_link !== FALSE AND $this->cur_page > ($this->num_links + 1))
{
$first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;
$output .= $this->first_tag_open.'<a id="'.$first_url.'" onclick="show_ajax_cards(this)" '.$this->anchor_class.'href="javascript:void(0)">'.$this->first_link.'</a>'.$this->first_tag_close;
}
// Render the "previous" link
if ($this->prev_link !== FALSE AND $this->cur_page != 1)
{
if ($this->use_page_numbers)
{
$i = $uri_page_number - 1;
}
else
{
$i = $uri_page_number - $this->per_page;
}
if ($i == 0 && $this->first_url != '')
{
$output .= $this->prev_tag_open.'<a id="'.$this->first_url.'" onclick="show_ajax_cards(this)"'.$this->anchor_class.'href="javascript:void(0)">'.$this->prev_link.'</a>'.$this->prev_tag_close;
}
else
{
$i = ($i == 0) ? '' : $this->prefix.$i.$this->suffix;
$output .= $this->prev_tag_open.'<a id="'.$this->base_url.$i.'" onclick="show_ajax_cards(this)"'.$this->anchor_class.'href="javascript:void(0)">'.$this->prev_link.'</a>'.$this->prev_tag_close;
}
}
// Render the pages
if ($this->display_pages !== FALSE)
{
// Write the digit links
for ($loop = $start -1; $loop <= $end; $loop++)
{
if ($this->use_page_numbers)
{
$i = $loop;
}
else
{
$i = ($loop * $this->per_page) - $this->per_page;
}
if ($i >= $base_page)
{
if ($this->cur_page == $loop)
{
// $output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
// $output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;
}
else
{
$n = ($i == $base_page) ? '' : $i;
if ($n == '' && $this->first_url != '')
{
$output .= $this->num_tag_open.'<a id="'.$this->first_url.'" onclick="show_ajax_cards(this)" '.$this->anchor_class.'href="javascript:void(0)">'.$loop.'</a>'.$this->num_tag_close;
}
else
{
$n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
$output .= $this->num_tag_open.'<a id="'.$this->base_url.$n.'" onclick="show_ajax_cards(this)" '.$this->anchor_class.'href="javascript:void(0)">'.$loop.'</a>'.$this->num_tag_close;
}
}
}
}
}
// Render the "next" link
if ($this->next_link !== FALSE AND $this->cur_page < $num_pages)
{
if ($this->use_page_numbers)
{
$i = $this->cur_page + 1;
}
else
{
$i = ($this->cur_page * $this->per_page);
}
$output .= $this->next_tag_open.'<a id="'.$this->base_url.$this->prefix.$i.$this->suffix.'" onclick="show_ajax_cards(this)"'.$this->anchor_class.'href="javascript:void(0)">'.$this->next_link.'</a>'.$this->next_tag_close;
}
// Render the "Last" link
if ($this->last_link !== FALSE AND ($this->cur_page + $this->num_links) < $num_pages)
{
if ($this->use_page_numbers)
{
$i = $num_pages;
}
else
{
$i = (($num_pages * $this->per_page) - $this->per_page);
}
$output .= $this->last_tag_open.'<a id="'.$this->base_url.$this->prefix.$i.$this->suffix.'" onclick="show_ajax_cards(this)"'.$this->anchor_class.'href="javascript:void(0)"'.$this->last_link.'</a>'.$this->last_tag_close;
}
// Kill double slashes. Note: Sometimes we can end up with a double slash
// in the penultimate link so we'll kill all double slashes.
$output = preg_replace("#([^:])//+#", "\1/", $output);
// Add the wrapper HTML if exists
$output = $this->full_tag_open.$output.$this->full_tag_close;
return $output;
}
and in the view create a function that will look like this
并在视图中创建一个看起来像这样的函数
function show_ajax_cards(obj)
{
var baseurl = obj.id;
$.ajax({
url: baseurl,
data:"baseurl="+baseurl,
type: 'POST',
success: function(html)
{
$('#cardReplace').html(html);
}
});
}
回答by Mufaddal Saifee
Apply Live click, if you are returning data from controller as follows:
应用实时点击,如果您从控制器返回数据如下:
jQuery("#pagination a").live('click',function(e){
e.preventDefault();
jQuery.ajax({
type: "POST",
url: jQuery(this).attr("href"),
success: function(res){
jQuery('#multiple_selection_data').html(res);
}
});
return false;
});