Silverstripe使用jquery ajax自动加载内容

时间:2016-01-22 14:53:18

标签: jquery ajax load refresh silverstripe

我需要一些帮助,使用PHP中的这个简单脚本来适应Silverstripe MVC系统。

<script  type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.0/jquery.min.js"></script>

<script type="text/javascript">

jQuery(document).ready(function() {
    var refreshId = setInterval(function() {
        jQuery('#load').fadeOut("fast", function () {
            jQuery(this).load("reload.php", function () {
                jQuery(this).fadeIn("fast");
            });
        });
    }, 1000 * 15);
});

</script>

我的主要问题是如何将零件代码加载到模板而不是整页内容。在此示例中,reload.php只是代码的一部分。但是在Silverstripe中,我需要将一部分代码渲染到模板中并从控制器中进行检索。

有人知道怎么做吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道你是否有更好的想法这样做,但有我的!它适合我的使用。我是一名初级程序员;)

routes.yml

Director:
  rules:
    'ajax//$Action/$ID': 'AjaxController'

ajaxcontroller.php

class AjaxController extends Controller {

    private static $allowed_actions = array(
        'news'
    );

    public function news(){

        $News = News::get()->sort('Sort',DESC);

        if (Director::is_ajax()){
                // Ajax!
                return $this->renderWith('AjaxInclude', array('News' => $News) );
            } else {
                // Not ajax!
                //return print_r($Pages);
        }
    }
}

包括/ AjaxIncludes.ss

<% loop News %>
    <p>$Title</p>
<% end_loop %>

HomePage.php或其他页面

class HomePage_Controller extends Page_Controller {

    public function init() {
        parent::init();

        Requirements::javascript($this->ThemeDir()."/javascript/ajax.js");
    }
}

ajax.js

jQuery.noConflict();

(function($) {
    $(document).ready(function() {

        var refreshId = setInterval(function() {    


            $.ajax({
                url: "ajax/news",
                cache: false,
                dataType: "html",
                success: function(data) {
                    if(!data){
                        $("#responsecontainer").removeClass('online');  
                        $("#responsecontainer").addClass('offline');    
                        $("#responsecontainer").fadeOut();  
                        //alert("offline");
                        $("#responsecontainer").html(data);
                    } else {
                        $("#responsecontainer").removeClass('offline'); 
                        $("#responsecontainer").addClass('online'); 
                        //alert("online");
                        $("#responsecontainer").html(data);
                    }
                }
            });
        }, 1000 * 5);
    });
}(jQuery));

最终,ID响应容器必须在HomePage.ss中激活或停用