好的,让我解释一下我的情况,然后我将解释代码。我使用的语言是 JavaScript、AJAX、PHP、MySQL。这是一个非常复杂的代码,我会尽力解释。
场景:我创建了一个脚本来获取存储在我的数据库中的项目。使用 javascript 我有一个函数,如果我对函数“fetchProjectWebCall()”的调用在括号内有一个值,则使用它,否则使 start == 0。
现在使用 ajax 请求我将它发送到 PHP。我在 php 中的脚本获取存储在我的数据库中的所有项目。当发回响应时,我包含一个名为 pagination 的数组,它为我提供了起点、终点、每页记录、数据库中的总记录、显示这些记录所需的页面。
if($result)
{
if(isset($request->data->start))
{
// Math for Pagination
$start = $request->data->start;
$end = $start + 9;
$records_per_page = 10;
$total_records = $result->num_rows;
$total_pages = ceil($total_records / $records_per_page);
$array = array();
while($row = $result->fetch_array())
{
$user_id = $row["project_creator"];
$creator_name = User::GetUserName($user_id);
$array[] = new Project($row["project_id"], $row["project_name"], $row["project_description"], $user_id, $creator_name);
}
$array['pagination'] = new Pagination($total_records, $total_pages, $records_per_page, $start, $end);
$response->data = $array;
$response->status = Response_Status::$_SC_SUCCESS;
}
PHP/MySQL/AJAX 都可以正常工作并生成正确的结果,所以我相信问题出在 JavaScript 之内。使用 AJAX 响应,我现在想显示从“开始”开始到“结束”结束的记录。这是JavaScript:
if(total < end)
{
for (var index = start; index < total; index++)
{
//Variables for Project Info
projid = response.data[index].project_id;
projname = response.data[index].project_name;
htmlString += "<tr class='rowLight' height='30'> <td>"
+ response.data[index].project_name
+ "</td><td>"
+ response.data[index].project_description
+ "</td><td>"
+ response.data[index].project_creator_name
+ "</td>"
+ "<td><input type='button' id='btnManageProject' value='Edit' onclick='manageProjectWebCall(" + projid + ");'/><input type='button' id='btnAssignGameToProject' value='Games' onclick='fetchProjectGamesWebCall("+ projid +");'/><input type='button' id='btnDuplicateProject' value='Duplicate' onclick='duplicateProjectWebCall(" + projid + ");'/></td></tr>";
}
}
else
{
for (var index = start; index <= end; index++)
{
//Variables for Project Info
projid = response.data[index].project_id;
projname = response.data[index].project_name;
htmlString += "<tr class='rowLight' height='30'> <td>"
+ response.data[index].project_name
+ "</td><td>"
+ response.data[index].project_description
+ "</td><td>"
+ response.data[index].project_creator_name
+ "</td>"
+ "<td><input type='button' id='btnManageProject' value='Edit' onclick='manageProjectWebCall(" + projid + ");'/><input type='button' id='btnAssignGameToProject' value='Games' onclick='fetchProjectGamesWebCall("+ projid +");'/><input type='button' id='btnDuplicateProject' value='Duplicate' onclick='duplicateProjectWebCall(" + projid + ");'/></td></tr>";
}
}
^^ 这是创建显示的地方,也是问题所在。使用条件 if total < end 是因为如果 end 值为 59(从 start + 9 的 php 脚本生成,在这种情况下 start 将为 50)并且数据库中的总记录为 52(从 php 脚本生成)它不会显示。第一个for块要求数组从原始请求生成的索引位置“start”开始并进入total,如果total < end仍然存在则授予条件
如果 total 不是 < end 它应该从 index [start] 到 index <= end,递增 1。其余代码工作正常。
问题/问题 即使在最后一个代码块中,对于每个其他条件总计和结束,显示应该上升到并包括结束值(从开始开始,比结束少 9)。当总计 = 结束时(例如:total_records == 49,开始 == 40,结束 == 49,records_per_page == 10,total_pages == 5,从响应数据生成)它不显示第 5 页。它只是在第 4 页挂断(开始 == 30,结束 == 39)。每当总计 = 结束(39 条记录,结束 = 39 也不会显示)时,就会发生这种情况
最后我的问题是,当total=end 时,脚本为什么不显示最后一页?我已经尝试了一切,包括改变不等式和包括总=结束条件。
还有一个问题,查看我的代码,可以在不向 javascript 添加任何更多条件的情况下重新编码(如果总 < 结束等)。我不想过多地更改脚本,因为它每隔一段时间都能完美运行。
感谢您抽出宝贵时间,希望我们能提出解决方案。如果您需要我解释更多,请告诉我。