更新了网页标题。
这是在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);
?>
答案 0 :(得分:1)
您可以将结果加载到您想要的任何html元素中,例如,如果您有一个ID为foo
的div,则可以按如下方式加载数据
$.get(url, function(data) {
$("#foo").html(data);
});
调用文件上的特定函数,将轻量级控制器引入该文件的顶部。
switch ($_GET['action']) {
case 'foobar':
foobar(); //your specific function
break;
}
因此,使用上面的控制器传递路由到的函数的动作值,然后将调用该函数。
答案 1 :(得分:0)
根据我的理解,您需要以下内容 -
您有一个页面(页面A)在特定时间调用ajax函数,它应该加载结果。
你有一个php函数,在传递参数“competitionId”时会提供这些结果。
你做错了是你在同一页面中有1和2没有任何控制器。你需要做的是,移动
<?php $getLeaderboard->getTable($_GET['competitionId']); ?>
进入另一个页面,说“getLeaderboardTables.php”。然后按如下方式修改您的html页面:
<table id="leaderboardresults">
<tbody>
</tbody>
</table>
然后你的ajax函数如下,它会将数据插入由id排行榜标识的数据保存表中:
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建议的操作并使用基于开关案例的控制器,以便可以使用相同的页面。
编辑完问题后,我有以下评论 -
您的表ID必须是leaderboardresults,而不是tbody id。如果你想把你的表体保持为tblData,那么编辑你的ajax脚本如下
$。get(url,function(data){ $('#tblData tr:last')。after(data); });
最重要的是,你既没有使用DevZero建议的控制器,也没有将php数据提取移动到不同的页面。您需要做的是:
选项1 - 正如我上面提到的,创建一个名为getLeaderboardTables.php的新页面,在那里放入数据库连接,包含类,并添加此行
<?php $getLeaderboard->getTable($_GET['competitionId']); ?>
所以这个新页面,当从浏览器调用时,应该只输出行和NOTHING else。然后调用此URL传递竞争ID,如前所述。
选项2 - Donot创建一个新页面,但是在你现有的页面中,有一个控制器,比如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想象成一个看不见的人,拿走你的网址,打开一个看不见的浏览器窗口,粘贴该链接,等待页面加载,复制页面的输出并将其存储在变量中。
您正在做的是,您通过AJAX加载整个页面,而不仅仅是您想要动态更新的输出。