使用AJAX调用特定的PHP函数

时间:2013-08-18 08:35:45

标签: php mysql jquery

更新了网页标题。

这是在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); 
?>

2 个答案:

答案 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)

根据我的理解,您需要以下内容 -

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

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

  3. 你做错了是你在同一页面中有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建议的操作并使用基于开关案例的控制器,以便可以使用相同的页面。

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

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

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

    2. 最重要的是,你既没有使用DevZero建议的控制器,也没有将php数据提取移动到不同的页面。您需要做的是:

    3. 选项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加载整个页面,而不仅仅是您想要动态更新的输出。