0

我是 jquery 和 cakephp 的初学者。我试图在我的页面索引中运行一个 jquery 函数,但它不起作用。这个函数在我的主页面索引中嵌套了一个ticker,来自另一个名为ticker的页面。使用的 cakephp 路径类似于 SessionModels/ticker.ctp 和 SessionModels/index.ctp。

当我ticker.ctp单独运行我的页面时,它可以毫无问题地显示代码,但是当我尝试<div id="ticker"> </div>使用我的 jquery 函数将它嵌套在一个中时index.ctp,它什么也没做。这是我的 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 是问题所在。感谢您的帮助

4

1 回答 1

0

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

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

将 'cache' 选项添加到您的 .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);
}

我在我的情况下对此进行了测试,它可以正常工作,但是,您应该确保在此之前加载 jQuery 。由于您在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(...)

于 2013-04-15T19:11:43.053 回答