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 获取的 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

您可以将结果加载到您想要的任何 html 元素中,例如,如果您有一个带有 id 的 div,foo您可以按如下方式加载数据

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

要调用文件上的特定函数,请在该文件的顶部引入一个轻量级控制器。

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

因此,使用上面的控制器传递您路由到的函数的操作值,然后将调用该函数。

于 2013-08-18T08:39:30.387 回答
0

据我了解,您需要以下内容-

  1. 您有一个在特定时间调用 ajax 函数的页面(页面 A),它应该加载结果。

  2. 您有一个 php 函数,它在传递参数“competitionId”时提供这些结果。

您做错的是在没有任何控制器的情况下在同一页面中有 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 的建议进行操作,并且还可以使用基于 switch case 的控制器,以便可以使用相同的页面。

在您编辑问题后,我有以下评论 -

  1. 您的表 id 必须是排行榜结果,而不是 tbody id。如果你想保持你的表体为 tblData,那么编辑你的 ajax 脚本如下

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

  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 回答