cakephp2中的jquery函数

时间:2013-04-15 18:33:15

标签: javascript jquery cakephp-2.0

我是jquery和cakephp的初学者。我试图在我的页面索引中运行一个jquery函数,它不起作用。 此函数在另一个名为ticker的页面的主页索引中嵌套一个自动收报机。 使用的cakephp路径就像SessionModels / ticker.ctp和SessionModels / index.ctp。

当我单独运行我的页面ticker.ctp时,它运行时没有问题显示自动收报机但是当我尝试将其嵌套在<div id="ticker"> </div>中并使用index.ctp中的jquery函数时,它什么都不做 这是我的javascript / jquery函数:

    <script type="text/javascript" > function ticker(){

    $.ajax ({
        type:'GET',
        url:'/SessionModels/ticker/',
        success:function(e){
            $('#ticker').html(e);
        },
        complete : function(e){
            setTimeout ("ticker()", 3000);
        }
    });

}

$(document).ready(function(){
ticker();
});</script>

我已添加,正如我在cakephp教程中看到的那样,我的控制器中的代码

public $helpers = array('Js');

这是我的ticker.ctp的内容

    <marquee >
<?php foreach ($sessions as $session): ?>
<span style="color:#333333; font-size:12px; font-weight:bolder; font-family:Arial; vertical-align: text-top;"><?php echo $session['Dictionnary']['ticker']; ?>
</span>
        <?php echo $session['SessionModel']['_open']; ?>
        <?php echo $session['SessionModel']['_close']; ?>

<?php endforeach; ?>
</marquee>

这是我的控制器的内容:

    class SessionModelsController extends Controller {

    public $helpers = array('Js');
    public $components = array('RequestHandler');

    public function index() {
        $this->set('sessions', $this->SessionModel->find('all', array('contain' => 'Dictionnary.stock_name')));

    }
    public function ticker() {
        $this->set('sessions', $this->SessionModel->find('all', array('contain' => 'Dictionnary.ticker')));
    }
}

正如我所说,它完美无缺,但在index.ctp中嵌入ticker.ctp是问题所在。 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

Http状态代码304'未修改'可能表示您的浏览器正在使用请求的缓存版本,而不是检索新数据。这可能是由服务器发送的“缓存”标头引起的。

jQuery.ajax()有一个'cache'选项,可以阻止AJAX请求的浏览器缓存,强制通过为每个请求添加随机时间戳来重新加载页面。

将“缓存”选项添加到.ajax选项并将其设置为“false”以使用它;

function ticker(){
    $.ajax ({
        type:'GET',
        url:'/SessionModels/ticker/',
        cache:false,
        success:function(e){
            $('#ticker').html(e);
        },
        complete : function(e){
            setTimeout(ticker, 3000);
        }
    });
}

请阅读jQuery.ajax()

中的文档

要检查ticker()函数是否实际运行,请尝试暂时将其更改为此值;

function ticker(){
    alert('tick');
    setTimeout(ticker, 3000);
}

我在我的情况下对此进行了测试并且没有问题,但是,您应该确保在之前加载。由于您在 View 中使用此代码,因此您可能会在之后加载jQuery(在结束</body>标记之前)

更好的选择是使用JsHelper的缓冲区并在布局中输出缓冲的脚本;

/**
 * JsHelper will append this block to the $(document).ready()
 */
$script = "
        function ticker() {
            $.ajax ({
                type:'GET',
                url:'/timeline/qty_breakdown/',
                cache:false,
                success:function(e){
                    $('#ticker').html(e);
                },
                complete : function(e){
                    setTimeout (ticker, 3000);
                }
            });
        }

        ticker();
";

$this->Js->buffer($script);

然后,在您的布局内(在结束</body>标记之前):

echo $this->Js->writeBuffer();

这将自动将您的脚本包装在$(document).ready(...)