Kohana / PHP / Ajax /如何调用控制器并返回HTML或部分

时间:2015-07-29 01:19:12

标签: php jquery ajax kohana

完全披露,我之前没有使用过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。我设置了一个警报,看看数据是什么,它实际上是从p标签Hello World开始的整个HTML页面。

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

3 个答案:

答案 0 :(得分:1)

有两种方法可以进行无限滚动:

  1. 返回可以直接粘贴到页面中的HTML
  2. 返回JSON数据,然后使用Javascript
  3. 生成和附加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,所以可能会犯一些小错误。

答案 1 :(得分:0)

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

$this->auto_render=false;

对于我不想要的HTML,回复不再臃肿。

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

答案 2 :(得分:0)

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