0

ページタイトルを更新しました。

これは Leaderboard.php にあります。現在、tbody に PHP 呼び出しがあることがわかります。

  <!-- The Leaderboard Table  -->
    <table id="tblData" class="table table-hover leaderboard-table target">

    <thead>
      <tr>
        <th class="hidden-phone">Rank</th>
        <th>Sales Person</th>
        <th>Total Points</th>
      </tr>
    </thead>
    <tbody id="leaderboardresults">
      <?php $getLeaderboard->getTable($_GET['competitionId']); ?>
    </tbody>
  </table>
  <!-- The Leaderboard Table END  -->

これは API/getLeaderboard.php にあります。これは getTable 関数がある場所です。

 <?php
class getLeaderboard {
  public function getTable($competitionId) {
//I run the SQL query and echo out some PHP
    }

これは Leaderboard.php にあります。

   function loadLeaderboard() {
       var competitionId = $("body").attr("data-competitionId");
       var url = "api/getLeaderboard.php?competitionId=" + competitionId;

       $.get(url, function(data) {
            //$("#leaderboardresults").html(data);
       });
     }

これは Leaderboard.php にもあります。AJAX get を実行する別の AJAX 呼び出し (これは完全に機能します) で、成功するとリーダーボードをリロードする必要があります。

 $(function() {
      //this works (/James)
    $(".navVisible").click(function() {
        var Competition = $("body").attr("data-competitionId");
        var Activity = $(this).attr("data-activity");
        $.post("registerresults.php", { data: Activity, competitionId: Competition })
        .done(function(data) {
            loadLeaderboard();
        });
    });
    loadLeaderboard();
  });

これは getLeaderboardTable.php です

    <?php 
include "common/common.php";
include "api/getLeaderboard.php";
$competitionId = $_GET['competitionId'];
$getLeaderboard->getTable($competitionId); 
?>
4

2 に答える 2

0

私が理解していることから、次のものが必要です-

  1. 特定の時間に ajax 関数を呼び出すページ (ページ A) があり、結果をロードすることになっています。

  2. パラメータ「competitionId」を渡すと、これらの結果を提供するphp関数があります。

あなたが間違っているのは、コントローラなしで同じページに 1 と 2 があることです。あなたがする必要があるのは、移動することです

<?php $getLeaderboard->getTable($_GET['competitionId']); ?>

別のページに移動するには、「getLeaderboardTables.php」と言います。次に、HTML ページを次のように変更します。

<table id="leaderboardresults">
<tbody>
</tbody>
</table>

次に、次のように ajax 関数を実行します。これにより、ID Leaderboardresults で識別されるデータ保持テーブルにデータが挿入されます。

function loadLeaderboard() {
      var competitionId = $("body").attr("data-competitionId");
      var url = "api/getLeaderboardTables.php?competitionId=" + competitionId;

      $.get(url, function(data) {
        $('#leaderboardresults tr:last').after(data);
      });
    }

.after により、新しい行がテーブルの最後に追加されます。それらを交換したい場合は、$("#leaderboardresults").empty();まず電話してください。

ただし、技術的に言えば、関数を別の PHP ページに移動する必要はありません。同じページを使用できるように、DevZeroが提案したことを実行し、スイッチケースベースのコントローラーも使用できます。

質問を編集した後、次のコメントがあります-

  1. テーブル ID は、tbody ID ではなく、リーダーボードの結果である必要があります。テーブル本体を tblData のままにしたい場合は、次のように ajax スクリプトを編集します。

    $.get(url, 関数(データ) { $('#tblData tr:last').after(データ); });

  2. 最も重要なことは、DevZero が提案したようなコントローラーを使用したり、php データ フェッチを別のページに移動したりしていないことです。あなたがする必要があるのは次のとおりです。

オプション 1 - 上で述べたように、getLeaderboardTables.php という名前の新しいページを作成し、そこに db 接続を配置し、クラスを含め、次の行を追加します。

<?php $getLeaderboard->getTable($_GET['competitionId']); ?>

したがって、この新しいページは、ブラウザから呼び出されたときに、行のみを出力し、それ以外は何も出力しないはずです。次に、前に述べたように、この URL に競合 ID を渡して呼び出します。

オプション 2 - 新しいページを作成しませんが、既存のページには、DevZero が言ったように、クラスに次のようにインクルードした後、html/php の一番上に以下を追加して、コントローラーを用意します。

switch ($_GET['action']) {
 case 'ajax':  
     $getLeaderboard->getTable($_GET['competitionId']); //your specific function
     break;
  default:
 ?>
Current html/php page content will come here in its entireity 
<?php      
}

ajax 呼び出しを次のように変更します。

var url = "api/getLeaderboard.php?action=ajax&competitionId=" + competitionId;

基本的な考え方は、AJAX を使用して PHP 関数を直接呼び出すことはできないということです。AJAX を使用して PHP ページを呼び出し、それにパラメーターを渡すと、PHP 関数またはメソッドが呼び出されて出力が生成され、その出力がブラウザー ウィンドウに出力されます。AJAX が行うことは、その出力を php ページからコピーし、それを JavaScript 変数に格納して、必要な処理を行うことです。したがって、ajax 関数に渡す URL は、動的に更新したいものだけをロードする必要があります。ここでの AJAX は、あなたの URL を受け取り、目に見えないブラウザー ウィンドウを開き、そのリンクを貼り付け、ページが読み込まれるのを待ち、ページの出力をコピーして変数に保存する、目に見えない人だと考えてください。

あなたがしていることは、動的に更新したい出力だけでなく、AJAX を介してページ全体をロードしていることです。

于 2013-08-18T08:47:48.463 に答える
0

結果を任意の html 要素にロードできます。たとえば、idfooを持つ div がある場合、次のようにデータをロードできます。

$.get(url, function(data) {
     $("#foo").html(data);
});

ファイルの特定の関数を呼び出すには、そのファイルの先頭に軽量コントローラーを導入します。

switch ($_GET['action']) {
     case 'foobar':  
         foobar(); //your specific function
         break;
}

したがって、上記のコントローラーを使用して、ルーティング先の関数のアクション値を渡すと、その関数が呼び出されます。

于 2013-08-18T08:39:30.387 に答える