簡體   English   中英

要使用PHP模板還是jQuery AJAX調用?

[英]To use PHP templates or jQuery AJAX calls?

這是我的index.php頁面的摘錄,其中顯示了帶有三個HTML鏈接的菜單。

選擇菜單項將定義page參數,然后將PHP模板邏輯加載該頁面參數,並填充到<div id="main">

<div class="span-24" id="menu">
  <table>
    <tr>
      <td><a href="index.php?page=races">Races</a></td>
      <td><a href="index.php?page=runners">Runners</a></td>
      <td><a href="index.php?page=searchRunners">Search</a></td>
    </tr>
  </table>
<br/>
</div>

<!-- main content -->
<div class="span-24" id="main">
<?php 
  $MYROOT=$_SERVER['DOCUMENT_ROOT'];
  if(isset($_GET['page']))
  {
    $page=$_GET['page'];
    @ require_once($MYROOT."/$page.php");
  }
  else
  {
    @ require_once($MYROOT."/races.php");
  }
?>
</div>

該解決方案效果很好,但是我擔心隨着我添加更多頁面並跟蹤更多頁面參數,這種方法將難以通過各種PHP require() / require_once()方法調用來維護。

我也有jQuery,我想知道僅使用基於AJAX的查詢來呈現<div id="main">的HTML的優點或缺點是什么?

我認為使用AJAX可能是一個更好的解決方案,因為我將在可以調用的頁面中以及在AJAX調用中可以傳遞哪些參數方面具有更大的靈活性。

我知道PHP和AJAX可以一起使用,但是如果您正在啟動這種類型的項目,您將如何做?

您不想這樣做。 AJAX很好,但是所有這一切都會濫用它。 這不僅會導致禁用Javascript的人不必要地訪問該網站(我相信您已經知道),而且還會破壞您網站上的網絡導航標准。 那么,某人如何發送鏈接給朋友以查看“比賽”頁面? 如何在頁面之間來回切換? 有解決方法,但這是不值得的。 您更適合只重構您的PHP代碼,因此它在包含所需內容的同時安全而動態。

為了進一步了解Paolo所說的內容,Google和其他搜索引擎無法“抓取”通過javascript加載的任何內容。 這意味着僅頁面上的靜態信息將被索引,而頁面排名將幾乎不存在。

如果您使用ajax,您仍將與需要為請求的任務進行設置的php進行通訊,因此什么都沒有真正改變。 我想我想知道為什么您要將參數傳遞回單個php腳本,而不是像這樣調用不同的php文件:

<td><a href="races.php">Races</a></td>
<td><a href="runners.php">Runners</a></td>
<td><a href="searchrunners.php">Search</a></td>

將它們分開放置。 使用模板系統。 一個非常簡單的使用方法是http://andy.greyledge.net/voot/index.php

您從一個HTML模板頁面開始,其中包含“%HEADER%”,“%FOOTER%”或“%BODY%”之類的替換器。

您將此頁面導入php頁面,設置這些變量,然后呈現該頁面。

如果要添加更多頁面,可以將其添加到HTML模板的“菜單”中,並顯示每個頁面。

其他所有人所說的一切都是正確的。

另一種選擇是使用要包含的頁面數組:

<?php 
    $pages = array('page', 'races');
    $MYROOT=$_SERVER['DOCUMENT_ROOT'];
    if(isset($pages[$_GET['page']])){
        @require_once($_GET['page'].'.php');
    }
?>

但是,如果您要以這種方式進行操作,則可能要考慮繼續使用MVC框架,因為這似乎是您嘗試重新創建的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM