使用AJAX调用特定的PHP函数

使用AJAX调用特定的PHP函数,php,mysql,jquery,Php,Mysql,Jquery,更新页面标题 这在leadboard.php上。您可以看到,我目前在tbody中得到了PHP调用 <!-- The Leaderboard Table --> <table id="tblData" class="table table-hover leaderboard-table target"> <thead> <tr> <th class="hidden-phone">Rank

更新页面标题

这在leadboard.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  -->
这也在leadboard.php上。另一个AJAX调用可以实现AJAX-get(这非常有效),如果成功,应该会重新载入排行榜

 $(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); 
?>

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

$.get(url, function(data) {
     $("#foo").html(data);
});
要调用文件上的特定函数,请在该文件顶部引入一个轻量级控制器

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

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

据我所知,您需要以下内容-

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

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

  • 你做错的是你在同一个页面中有1和2,没有任何控制器。你需要做的是,移动

    <?php $getLeaderboard->getTable($_GET['competitionId']); ?>
    
    .after确保将新行追加到表的末尾。如果要替换它们,请调用
    $(“#排行榜结果”).empty()第一个

    但是从技术上讲,您不需要将函数移动到不同的PHP页面;您可以按照DevZero的建议进行操作,并拥有一个基于开关案例的控制器,以便可以使用相同的页面

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

  • 您的表id必须是排行榜结果,而不是tbody id。如果您希望将表体保留为tblData,请按如下所示编辑ajax脚本

    $.get(url, function(data) {
         $("#foo").html(data);
    });
    
    $.get(url、函数(数据){ $('tblData tr:last')。在(数据)之后; });

  • 最重要的是,您既没有使用DevZero建议的控制器,也没有将php数据获取移到其他页面。您需要做的是:

  • 选项1——正如我前面提到的,创建一个名为getLeaderboardTables.php的新页面,在那里放置db连接,包括类,并添加此行

    <?php $getLeaderboard->getTable($_GET['competitionId']); ?>
    
    其基本思想是,不能使用AJAX直接调用PHP函数。AJAX可以用来调用PHP页面,并向其传递一些参数,这些参数反过来调用PHP函数或方法来生成一些输出,并将输出打印回浏览器窗口。AJAX将要做的是从php页面复制输出,并将其存储在javascript变量中,以执行您想要的操作。因此,传递给ajax函数的url必须只加载要动态更新的内容。把AJAX想象成一个看不见的人,他获取您的url,打开一个看不见的浏览器窗口,粘贴链接,等待页面加载,复制页面输出,并将其存储在变量中


    您要做的是,通过AJAX加载整个页面,而不仅仅是要动态更新的输出

    看起来你忘了问问题?是的,对不起。函数loadleadboard()是我想要的帮助。从一个包含多个公共函数的文件(getleadboard.php)中调用一个特定函数(getTable)。是的,我知道,但是从一个包含多个公共函数的文件中调用一个特定函数时遇到了问题?
    <table id="leaderboardresults">
    <tbody>
    </tbody>
    </table>
    
    function loadLeaderboard() {
          var competitionId = $("body").attr("data-competitionId");
          var url = "api/getLeaderboardTables.php?competitionId=" + competitionId;
    
          $.get(url, function(data) {
            $('#leaderboardresults tr:last').after(data);
          });
        }
    
    <?php $getLeaderboard->getTable($_GET['competitionId']); ?>
    
    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      
    }
    
    var url = "api/getLeaderboard.php?action=ajax&competitionId=" + competitionId;