【问题标题】:To use PHP templates or jQuery AJAX calls?使用 PHP 模板或 jQuery AJAX 调用?
【发布时间】:2009-03-26 18:06:09
【问题描述】:

这是来自我的index.php 页面的 sn-p,我在其中显示了一个包含三个 HTML 链接的菜单。

选择一个菜单项定义页面参数,然后 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 的查询来呈现 &lt;div id="main"&gt; 的 HTML 会有什么好处或坏处。

我认为使用 AJAX 可能是更好的解决方案,因为我可以在可以调用的页面以及可以在 AJAX 调用中传递哪些参数方面拥有更大的灵活性。

我知道 PHP 和 AJAX 可以一起使用,但是如果你开始这种类型的项目,你会怎么做呢?

【问题讨论】:

  • 只是一个提示,我会认真考虑清理 $_GET['page'] 之类的东西

标签: php jquery ajax


【解决方案1】:

你不想这样做。 AJAX 很好,但是这将是滥用它。它不仅会不必要地使禁用 Javascript 的人无法访问该网站(我相信您已经知道),它还会破坏您网站上的网络导航标准。那么,如何将链接发送给朋友以查看 Races 页面呢?如何在页面之间来回切换?有解决方法,但不值得。你更适合只重构你的 PHP 代码,这样它是动态的,同时包含你想要的内容是安全的。

【讨论】:

    【解决方案2】:

    为了扩展 Paolo 所说的内容,Google 和其他搜索引擎无法“抓取”任何通过 javascript 加载的内容。这意味着只有页面上的静态信息会被编入索引,而您的页面排名几乎不存在。

    【讨论】:

      【解决方案3】:

      如果您使用 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>
      

      【讨论】:

        【解决方案4】:

        使它们成为单独的页面。使用模板系统。一个非常简单的使用是http://andy.greyledge.net/voot/index.php

        您从一个包含替换器的 HTML 模板页面开始,例如“%HEADER%”或 %FOOTER% 或 %BODY%。

        你把这个页面导入一个php页面,设置这些变量然后渲染页面。

        如果您想添加更多页面,请将其添加到 HTML 模板中的菜单中,它会显示在每个页面中。

        而且其他人所说的一切都是正确的。

        【讨论】:

          【解决方案5】:

          另一种选择是使用您想要拥有的页面数组:

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

          但如果您打算这样做,您可能需要考虑转向 MVC 框架,因为这似乎是您尝试重新创建的内容

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-08
            • 2011-01-17
            相关资源
            最近更新 更多