我是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是问题所在。 谢谢你的帮助
答案 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);
}
});
}
中的文档
要检查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(...)
中