我正在尝试在我正在构建的Web应用程序中实现加载更多功能。 当应用程序加载时,它会对控制器进行ajax调用,该控制器从数据库中检索数据,然后使用JSON对它们进行编码。 我正在使用mysql查询中的限制和偏移量,当用户向下滚动时,我会加载更多数据。 这是控制器中进行ajax调用的方法
function latest_pheeds($offset = 0) {
//Confirm if a user is logged before allowing access
if($this->isLogged())
{
//Limit
$limit = 20;
//user id
$user_id = $this->session->userdata('user_id');
//load pheeds
$dt = $this->pheed_model->get_latest_pheeds($limit,$offset);
$data = $dt['pheeds']; //data
$total = $dt['total']; //Total no of rows of data
$return['pheeds'] = $data;
echo json_encode($return); //encode in json
} else {
$this->output->set_status_header('401',"Attempting Unauthorized Access");
}
}
如何将这些数据分解为页面,所以我可以通过ajax调用简单地将页面作为参数传递给方法,以便用jQuery实现更多的加载?
答案 0 :(得分:2)
通过将$offset
与(page number - 1)
相乘来计算$limit
:
$offset = ($page - 1) * $limit;
因此,如果$ page为1,那么它将是(1 - 1) * 20 = 0 * 20 = 0
,
如果$ page为2,那么它将是(2 - 1) * 20 = 1 * 20 = 20
还将函数参数$offset
重命名为$page
[编辑]
我还要做的是查询一行,而不是需要,所以我可以检测是否有下一页,例如:
$dt = $this->pheed_model->get_latest_pheeds($limit + 1,$offset);
$next_page = false;
if (count($dt) > $limit) {
$next_page = true;
$dt = array_pop($dt); // Excluding the last row so it is same size as $limit
}
// More code....
$return['next_page_exists'] = $next_page;