cakephp ajax分页只能运行一次 - 脚本没有被评估?

时间:2012-04-27 06:59:07

标签: ajax cakephp

我遵循了cakephp网站的教程,但是与ajax的分页只运行一次 - 内容已更新且确定无误。但是我第二次点击一些页面链接整个页面被重新加载 - 我认为当ajax刷新内容时,click()事件处理程序不再绑定 - 我不知道为什么......我使用这个:

$this->Paginator->options(array(
    'update' => '#content',
    'evalScripts' => true
)); 

当我在源代码中加载页面时,有:

<a href="/final/books/index/page:9/sort:id/direction:asc" id="link-458631432" rel="prev">« Previous</a>

    $(document).ready(function (){
         $("#link-925538478").bind("click", function (event) {
             $.ajax({dataType:"html", success:function (data, textStatus){
                 $("#content").html(data);}, url:"\/final\/books\/index\/page:10\/sort:id\/direction:desc"});
                 return false;});
             ...

当我点击例如下一页(第一次)时,所有内容都会刷新(链接hrefs也是如此有效)但脚本没有重新加载所以没有点击事件被绑定我认为再次点击下一页只是使用链接。

这很奇怪,因为我在分页链接后添加了这个:

<script>
    $(document).ready(function (){ 
        alert('yes'); 
    });
</script>

首次ajax刷新后会显示警告... 我设置了这个东西。 <?php echo $this->Js->writeBuffer(); ?>最后......

-------------------修改

我认识到它不是分页符 - 对于以下2个链接:

<?php echo $this->Js->link('link1', array('author' => 'abc'), array('update' => '#content')); ?>
<?php echo $this->Js->link('link2', array('author' => '123'), array('update' => '#content')); ?>

它是一样的 - 当我点击link1它的ajax时,然后当我点击link2时会有正常的重载 - 所以它是ajax刷新后的脚本评估的东西......那可能是什么?

我正在设置JSHelper:

var $helpers = array('Js' => array('Jquery'));

2 个答案:

答案 0 :(得分:3)

我想通了! 这是因为ajax请求将布局设置为app / View / Layouts / ajax.ctp,而ajax.ctp是:

<?php echo $this->fetch('content'); ?>

我必须添加此行

<?php echo $this->Js->writeBuffer(); ?>

到ajax.ctp编写java脚本(所以ajax链接在ajax请求之后工作)。

现在分页效果很好!!!

答案 1 :(得分:-1)

Cake php Ajax Paginator似乎没有正常工作。我也有类似的问题。

我建议你使用cakephp插件Cakephp-DataTable

此插件已实现分页,默认情况下它具有大部分功能。他们还提供了文档,如果您发现任何执行上的任何困难,请访问issues section

此外,开发人员非常敏感,如果您有任何内容,可以获得该插件的说明。