我正在使用CakePHP 1.3和http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
的jQuery脚本。我遇到的问题是,在AJAX调用重新加载页面的<div id="part2">
时,它会重新加载test_page.ctp
内的整个页面(<div id="part2">
)。如何将更新隔离到<div id="part2">
并且只加载了<div id="part2">
test_page.ctp
部分?
test_page.ctp
中的CakePHP代码:
// at the beginning of cpt file
$this->Paginator->options(array(
'evalScripts' => true,
'update' => '#part2',
'before' => $this->Js->get('#loading')->effect('fadeIn', array('speed' => 'fast')),
'complete' => $this->Js->get('#loading')->effect('fadeOut', array('speed' => 'fast'))
));
// at the very end of ctp file
echo $this->Js->writeBuffer();
初次加载时我的页面布局(.../controller_name/test_page
):
- - - - - - - - - - - - - - - -
| <div id="part1">...</div> |
- - - - - - - - - - - - - - - -
| <div id="part2"> |
| ... |
| <previous> 1 2.. 5 <next> |
| </div> |
- - - - - - - - - - - - - - - -
移到另一页后我的页面布局(.../controller_name/test_page
):
- - - - - - - - - - - - - - - -
| <div id="part1">...</div> |
| this <div> is not reloaded |
- - - - - - - - - - - - - - - -
| <div id="part2"> |
| <div id="part1"> |
| entire next page |
| </div> |
| </div> |
- - - - - - - - - - - - - - - -
我有一个问题,当我只想用test_page.ctp
更新其内容时,AJAX调用会将整个<div id="part2">
插入<div id="part2">
。
答案 0 :(得分:1)
您需要创建另一个.ctp
文件,其中包含/生成您要呈现的内容。然后在ajax
布局中呈现该文件。 ajax
布局本质上是一个空布局,只输出.ctp
文件的内容。这是它的工作原理:
-----------------------------
| OuterSection is your |
| Layout |
| ----------------------- |
| | Inner Section is | |
| | your view file | |
| | | |
| ----------------------- |
|---------------------------|
这就是渲染的工作方式,它将网站的布局与其所有不同的页面分开。
要在cake 1.3中的ajax
布局内进行渲染,请使用:
$this->layout = 'ajax';
在您使用AJAX调用调用的控制器函数中。
答案 1 :(得分:1)
在我的情况下,我只是将此代码移至layout
并且工作正常:
$this->Paginator->options(array(
'evalScripts' => true,
'update' => '#part2',
'before' => $this->Js->get('#loading')->effect('fadeIn', array('speed' => 'fast')),
'complete' => $this->Js->get('#loading')->effect('fadeOut', array('speed' => 'fast'))
));