艰难的分页脚本

时间:2013-05-22 20:41:43

标签: php javascript mysql ajax pagination

好的,让我解释一下我的情况然后我将解释代码。我使用的语言是JavaScript,AJAX,PHP,MySQL。这是一个非常复杂的代码,我会尽力解释。

方案: 我创建了一个脚本来获取存储在我的数据库中的项目。使用javascript我有一个函数,说明如果我对函数“fetchProjectWebCall()”的调用在括号内有一个值,否则使start == 0。

现在使用ajax请求我将它发送给PHP。我在PHP中的脚本获取存储在我的数据库中的所有项目。当发回响应时,我包含一个名为分页的数组,它给出了起点,终点,每页记录,数据库中的总记录,显示这些记录所需的页面。

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>";
            }
        }           

^^这是创建显示的位置,最终是问题所在。如果总计&lt;使用end是因为如果结束值是59(从php脚本生成的是start + 9,在这种情况下start将是50)并且db中的总记录是52(从php脚本生成)它将不会显示。块的第一个要求数组从原始请求生成的索引位置“start”开始并转到total,如果total&lt;结束仍然存在

如果总数不是&lt;它应该从索引[start]到索引&lt; = end,递增1.其余的代码工作正常。

问题/问题 即使在最后一个代码块中,对于total和end的每个其他条件,显示应该上升并包​​括结束值(从start开始,然后结束9)。当total = end(例如:total_records == 49,start == 40,end == 49,records_per_page == 10,total_pages == 5,从响应数据生成)时,它不会显示第5页。它只是挂在第4页(开始== 30,结束== 39)。只要total = end(39条记录,结束= 39它也不会显示)

,就会发生这种情况

最后我的问题是,当total = end时,脚本怎么没有显示最终页面?我已经尝试了一切,包括改变不等式和包括总=结束条件。

另一个问题是,检查我的代码可以重新编码而无需向javascript添加任何更多条件(如果总计&lt; end等)。我不想更改剧本,因为它每隔一段时间就完美地运作。

感谢您的时间,希望我们能够提出解决方案。如果您需要我解释更多,请告诉我。

0 个答案:

没有答案