1

さて、私の状況を説明してから、コードを説明します。私が使用している言語は、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>";
            }
        }           

^^これは表示が作成される場所であり、最終的に問題がある場所です。end 値が 59 (start + 9 である php スクリプトから生成された場合、この場合 start は 50 になります) であり、データベース内の合計レコードが 52 (php スクリプトから生成された) であった場合、条件 if total < end が使用されます。表示されません。最初の for ブロックは、配列が元のリクエストから生成されたインデックス位置「開始」から開始し、合計に移動することを要求し、合計 < 終了がまだ存在する場合の条件を付与

total が < end でない場合は、index [start] から index <= end まで、1 ずつインクリメントする必要があります。コードの残りの部分は正常に動作します。

問題/問題 コードの最後のブロックであっても、total と end の他のすべての条件について、表示は end の値 (start から始まり、9 から end を引いた値) まで表示される必要があります。total = end (例: total_records == 49、start == 40、end == 49、records_per_page == 10、total_pages == 5、応答データから生成) の場合、5 ページ目は表示されません。単純に 4 ページ (開始 == 30、終了 == 39) でハングアップします。これは、合計 = 終了するたびに発生します (39 レコード、終了 = 39 も表示されません)。

最後に私の質問は、total=end のときにスクリプトが最終ページを表示しないのはなぜですか? 不等式の変更や total=end 条件の追加など、すべてを試しました。

そして別の質問です。コードを確認すると、javascript に条件を追加せずに再コーディングすることができます (合計 < 終了などの場合)。スクリプトは毎回完全に機能するため、スクリプトをあまり変更したくありません。

お時間をいただきありがとうございます。解決策を見つけられることを願っています。さらに説明する必要がある場合は、お知らせください。

4

0 に答える 0