【问题标题】:Kohana/PHP/Ajax/ How to call controller and return HTML or a partialKohana/PHP/Ajax/ 如何调用控制器并返回 HTML 或部分
【发布时间】:2015-10-19 19:13:00
【问题描述】:

完全披露,我以前没有使用过 Ajax。我开始阅读指南,但时间限制让我惊慌失措并在这里寻求帮助。

与 Kohana 合作并试图弄清楚如何实现无限滚动。该应用程序已设置现有分页。

我发现通过在我的脚本中执行此操作:

$.post('mycontroller/infinite', {page:page}, function(data) {
    $('.mycontainer').append(data);
});

并在我的控制器中设置操作:

<?php
public function action_infinite(){
?><p>HELLO WORLD</p><?php
}
?>

整个页面在 Hello World 文本之后被附加到我的 div 中。我设置了一个警报来查看数据中的内容,它实际上是整个 HTML 页面,以 p 标签 Hello World 开头。

如何从我的控制器返回部分而不是附加整个页面?

【问题讨论】:

    标签: php jquery ajax kohana


    【解决方案1】:
    public function action_getjson()
    {
        $this->response->headers('Content-Type', 'application/json; charset=utf-8');
        $this->auto_render = false;
        $this->response->body(json_encode(['var' => 'blabla'));
    }
    

    【讨论】:

      【解决方案2】:

      好的,所以我的主要问题是整个页面都在响应中。我发现这是Kohana的事情。通过将其放在我的控制器方法中:

      $this->auto_render=false;
      

      响应不再是我不想要的 HTML 臃肿。

      然后我只需要设置我的 View::factory 并回显它。

      【讨论】:

        【解决方案3】:

        无限滚动有两种方式:

        1. 返回可以直接粘贴到页面中的 HTML
        2. 返回 JSON 数据,然后使用 Javascript 生成和附加 HTML

        第一种方法的优点是您不需要两次重写视图。假设您使用的是普通的旧 PHP 模板,您的代码将如下所示:

        产品页面浏览量:

        <html>
        <!-- blah blah blah -->
        <div id="products">
        <?php echo View::factory('products/page')->bind('page_num', $page)->bind('products', $products) ?>
        </div>
        <!-- blah blah -->
        

        页面浏览量

        <?php foreach($products as $product): ?>
            <div class="product"><!-- blah blah --></div>
        <?php endforeach ?>
        

        页面获取控制器

        public function action_page()
        {
            $this->template->content = View::factory('products/page')->bind(...);
        }
        

        重点是将产品页面代码与呈现单个产品的实际代码分开。这样您就可以轻松地仅调用产品渲染代码来进行无限滚动等操作。

        注意:我已经多年没有使用 Kohana,所以可能会犯一些小错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-18
          • 1970-01-01
          • 1970-01-01
          • 2020-08-13
          • 1970-01-01
          相关资源
          最近更新 更多