【问题标题】:Silverstripe auto load content with jquery ajaxSilverstripe 使用 jquery ajax 自动加载内容
【发布时间】:2016-04-29 05:16:15
【问题描述】:

我需要一些帮助来调整这个简单的 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 中,我需要将部分代码渲染到模板并从控制器中检索它。

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

【问题讨论】:

  • 您需要在控制器中执行一个操作来呈现您想要的部分。您还可以使用 Director::is_ajax() 重用可能的现有操作。也可以看看。 ajax-silverstripe.mmkdigital.com/#
  • 不错!不完全是我需要的,但有助于了解如何将代码从控制器传递到模板。谢谢!
  • 好吧,您的问题有点过于宽泛,无法提供更好的答案。如果您告诉我们更多关于问题的 silverstripe 部分以及您已经尝试过的代码,我们可以提供更多帮助......
  • 你给我的链接解决了我的问题。我查看了代码,并根据需要构建了代码...如果您可以进行更好的编程,您想查看代码吗?
  • 如果你觉得我可以做得更好;)

标签: jquery ajax load refresh silverstripe


【解决方案1】:

我不知道您是否有更好的主意,但有我的!它很适合我的使用。我是一名初级程序员;)

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 responsecontainer 必须在 HomePage.ss 中才能激活或停用

【讨论】:

  • 这正是我一开始所需要的,但这不是一个超级解决方案。如果触发刷新时仅加载新新闻(如果有的话)并将内容放在其他内容之上会更准确......我认为复杂......
猜你喜欢
  • 2011-09-28
  • 2011-06-17
  • 2013-08-06
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2017-04-07
  • 2011-01-21
  • 1970-01-01
相关资源
最近更新 更多