2013-08-18 55 views
0

更新了頁面標題。使用AJAX調用特定的PHP函數

這是在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); 
?> 
+1

看起來你忘了問一個問題? – BenM

+0

是的,對不起。函數loadLeaderboard()是我想要的幫助。使用多個公用函數從文件(getLeaderboard.php)調用一個特定函數(getTable)。 – user2656127

回答

0

從我的理解,你需要以下 -

  1. 你有一個頁面(A),它要求在特定時間的AJAX功能,它應該加載搜索結果。

  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); 
     }); 
    } 

的。經過保證將新行添加到表的末尾。如果您想替換它們,請先撥打$("#leaderboardresults").empty();

從技術上講,你不需要將函數移動到不同的PHP頁面;您可以執行DevZero建議的操作,並擁有基於開關的控制器,以便可以使用相同的頁面。

編輯完問題後,我有以下幾點意見 -

  1. 你的表ID必須是leaderboardresults,不TBODY ID。如果你想保持你的表身如tblData,然後如下

    $獲得(URL,功能(數據){ $( '#tblData TR:最後的' 編輯AJAX腳本)後(數據); });

  2. 最重要的事情是,你既沒有使用一個控制器像DevZero建議,也沒有移動的PHP數據獲取到不同的頁面。你將需要做的是:

選項1 - 正如我上面提到的,創建一個新的頁面,叫getLeaderboardTables.php,那邊就把數據庫連接,包括類,並添加此行

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

因此,這個新的頁面,當從瀏覽器調用應該只輸出行和NOTHING其他。然後像我之前提到的那樣通過競爭ID來調用這個URL。

選擇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看作是一個看不見的人,他需要你的url,打開一個不可見的瀏覽器窗口,粘貼這個鏈接,等待頁面加載,複製頁面的輸出並將它存儲在一個變量中。

你正在做的是,你正在通過AJAX加載整個頁面,而不僅僅是你想動態更新的輸出。

1

可以加載結果成你想要例如任何HTML元素,如果你有ID foo一個div可以按如下

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

要調用文件上的特定功能,請將輕量級控制器引入該文件的頂部。

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

因此,與上面的控制器傳遞函數的動作值您的路由,然後該函數將被調用。

+0

是的,我知道,但我在執行多個公用函數的文件時調用某個特定函數時遇到問題? – user2656127

+0

@ user2656127看看我更新的答案 – DevZer0