【问题标题】:How To Change My code to Use AJAX如何更改我的代码以使用 AJAX
【发布时间】:2013-08-26 16:45:06
【问题描述】:

我已经构建了一个基本的 MVC 字体控制器应用程序。它建立的目的是为了方便网站编辑、索引。 php是每个js和css文档加载的唯一页面,然后前端控制器将相应的内容文件向前带入指定的div中,通过在末尾添加?pagename即可调用正确的文档网址(例如:site.com/index.php?about-us)。它运行良好,没有 PHP 错误,但是我现在正在尝试在站点中构建一个音频播放器,并希望它在页面之间保持不变,所以我试图编辑这个 mvc 代码以使用 ajax,这样页面就不会重新加载改变内容。下面是我的页面代码。

index.php code snippet

<div id="mpane-in">
    <?php

       /** Display errors in production mode Only DO NOT un-comment unless testing **/
       //ini_set('display_errors', 1);

       // Load the routing controller
       require 'application/router.php';
    ?>
</div>

/application/router.php

  require 'load.php';
  require 'model.php';

  require 'controller.php';
  new Controller(); 

load.php

class Load {
  function view( $file_name, $data = null ) 
    {
      if( is_array($data) ) {
         extract($data);
    }
    include 'pages/' . $file_name;
  }
}

model.php

class Model {
   public function user_info()
   {
      // simulates real data
      return array(
         'first' => 'Target',
         'last'  => 'Not_Loaded'
      );
   }
}

controller.php

 class Controller {
   public $load;
   public $model;

   function __construct()
   {
      $this->load = new Load();
      $this->model = new Model();

      // determine what page you're on
      $this->home();
   }

   function home()
   {
       if ($_SERVER['QUERY_STRING'] === ""){
        $data = $this->model->user_info();
        $this->load->view('main.php' , $data);
       }
       else {
        $data = $this->model->user_info();
        $this->load->view($_SERVER['QUERY_STRING'] . '.php' , $data);
       }
   }
}

任何建议都会很棒!谢谢!

【问题讨论】:

  • 这不是 MVC,index.php 应该是应用程序的引导程序,在决定路由、加载控制器和模型然后从模型接收数据传递给视图之后,视图是链中的最后一个,还您对目录遍历攻击持开放态度
  • 老实说,我并不完全确定它是如何工作的 100%,我遵循了一个在线教程,简要解释了它,但它相当不清楚。有没有更好的方法来完成我正在寻找的任务?我不想要一个完整的 mvc,他们做的比我正在寻找的更多,这就是为什么这是一个如此完美的解决方案。
  • AJAX 是一种传输方式,您放在这里的任何内容都不会阻止您已经拥有 AJAX。
  • 欧文我想的差不多,但我不知道如何实现它

标签: php jquery


【解决方案1】:

以一种过于简单的方式,您可以使用现有代码而无需更改任何内容 e.克

 class Controller {
  .....

  //call this ajax function 
  function ajaxLogin(){
       $this->load->partialView($_SERVER['QUERY_STRING'] . '.php' , $data);
  }
}

您只需要使用部分视图来避免加载 &lt;html&gt;&lt;header&gt;&lt;/body&gt; ,在文本/html 响应以及 json 和 xml 输出的情况下,您可能需要在回显视图内容之前发送正确的内容类型标头。以一种肮脏而快速的方式添加一些东西来处理内容类型和部分视图,你就完成了。

【讨论】:

  • 好的,我明白了,但是我想我不明白的是如何通过js调用这个函数。以及如何修改我的链接系统。例如,我的导航菜单将页面重定向到 ?page-name ,这会导致重新加载,因为 url 正在更改。这会因为使用ajax 而改变吗?我曾经使用一个名为 ajaxpage 的脚本,它完全符合我的要求,但我最终停止使用它,因为我无法让它更改 url,也无法让它通过 url 转到特定页面。我想我正在寻找两全其美的东西。你认为有可能吗?如果是的话怎么办?
  • 我认为这是您的 Router 类的功能,用于将请求路由到特定的 Controller 方法。如果您通过 ajax(从导航菜单)加载页面,则必须从 javascript 处理该页面,这样当您单击链接时,它会发送 AJAX 请求,例如 &lt;a onclick='loadAJax();' href="#page_name"&gt;Title&gt;&lt;/a&gt;
  • 哦,我明白了!惊人的。在过去的几天里,我一直在谷歌上搜索,试图了解 ajax 的基础知识,这对我来说也是一个非常重要的学习练习。感谢您的提示,请检查这些提示并发布任何进一步的问题! :D
猜你喜欢
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2019-06-13
相关资源
最近更新 更多