好吧,我是CakePHP的新手。这是一个痛苦的一天来调试这个。这是我的代码:
templates_controller.php
function reajax($id = NULL) {
$this->layout = false;
$this->Template->id = $id;
$template = $this->Template->read();
$this->set('result', $template['Template']['content']);
}
reajax.ctp
echo $result;
js文件
$(document).ready(function() {
$(".abcd").click(function(event){
event.preventDefault();
var id = this.id;
$.ajax({
type:"GET",
url:"/templates/reajax/" + id,
success : function(data) {
alert('success');
$("textarea").text(data);
},
error : function() {
alert(id);
},
})
});
})
点击文件
<ul class="content-box-tabs">
<?php echo $html->link($html->image('thumbnails/'.$template['Template']['thumbnail'], array('alt' => 'test', 'height' => '120', 'width' => '110')), array('controller' => 'templates', 'action' => 'reajax'), array('class' => 'abcd', 'id' => $template['Template']['id'], 'escape' => false))?>
</ul>
每次收到错误结果时,我都不知道我的代码有什么问题。谁能帮我?提前谢谢。
当我编辑下面的JS文件时,一切进展顺利。我不知道这是否是 CakePHP 的错误,或者我的代码是否有其他问题。我需要一个蜘蛛侠!
$(document).ready(function() {
$(".abcd").click(function(event){
event.preventDefault();
var id = this.id;
$.ajax({
type:"GET",
url:"/cakephp/templates/reajax/" + id,
//url: "/templates/reajax/" + id,
success : function(data) {
alert('success');
$("textarea").text(data);
},
error : function() {
alert(id);
},
})
});
})
答案 0 :(得分:5)
你得到错误的原因总是因为你永远不会从你必须做一个json回声的动作中返回一个响应,例如,你只是设置数据就是这样。
您还应该在控制器方法中进行某种验证,如果具有提供的ID的模板不存在会发生什么?您将收到错误并且没有处理它。
答案 1 :(得分:2)
不确定此字符串
$this->layout = false;
像这样创建新的空布局ajax.ctp
<?=$content_for_layout?>
并尝试使用它
$this->layout = 'ajax';
和....您可以尝试以这种方式使用ajax请求
$.get('/controller/action/'+Math.random(),{},function(data){
$('#result').html(data);
});
答案 2 :(得分:0)
1。$this->autoRender = false;
或$this->viewBuilder->layout('ajax');
(对于Cakephp 3.0&amp;在布局文件夹中制作ajax.ctp)
ajax.ctp
应该看起来像
<?php
echo $this->fetch('content') ;
?>
你不需要为ajax函数创建.cpt,因为ajaxFunction可以返回一些值而不是html。
然后你可以检查它是否是ajax请求。(这对于最佳实践并不重要)
if ($this->request->is('ajax')) {
// do your logic here
}
现在你的代码应该是这样的
function reajax($id = NULL) {
$this->autoRender= false;
$result = "Some value";
echo $result;`enter code here`
}
它会帮助你。
答案 3 :(得分:-1)
首先你应该回显你的结果然后退出你的函数或使它成为autoRender = false; 对于debuging你应该使用开发人员工具。