CakePHP Jquery.ajax()
Posted
技术标签:
【中文标题】CakePHP Jquery.ajax()【英文标题】: 【发布时间】:2011-11-08 05:31:35 【问题描述】:嗯,我是 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);
,
)
);
)
【问题讨论】:
您是否使用 Firebug 检查过错误结果? ajax 响应的内容 我已经成功了。但是在 js 文件中有一个有趣的代码。检查编辑的帖子。谢谢! 您可能应该对结果进行 json_encode。 【参考方案1】:您总是收到错误的原因是因为您永远不会从必须执行 json 回显的操作中返回响应,例如,您只是在设置数据,仅此而已。
您还应该在控制器方法中进行某种验证,如果具有所提供 ID 的模板不存在会怎样?你会得到一个错误并且没有处理它。
【讨论】:
感谢您的建议。我将在控制器中编写一个强大的代码并返回 jaso 数据类型。干杯!【参考方案2】:不确定这个字符串
$this->layout = false;
像这样创建新的空布局 ajax.ctp
<?=$content_for_layout?>
并尝试使用它
$this->layout = 'ajax';
并且....您可以尝试将这种方式用于ajax请求
$.get('/controller/action/'+Math.random(),,function(data)
$('#result').html(data);
);
【讨论】:
我添加了一些关于 ajax 查询的示例,这是我通常做的方式,顺便说一句,你使用了一些调试器吗? 对不起,我只使用 Firebug。事实上,我认为 ajax url 有问题。我什至无法在 PHP 文件中获取参数“id”。 最后我成功了,但我不知道为什么。检查编辑的帖子。还是谢谢你们!【参考方案3】:1.$this->autoRender = false;
或 $this->viewBuilder->layout('ajax');
(对于 Cakephp 3.0 并在布局文件夹中创建一个 ajax.ctp)
ajax.ctp
应该看起来像
<?php
echo $this->fetch('content') ;
?>
您不需要为 ajax 函数创建 .cpt,因为 ajaxFunction 可以返回一些值而不是 html。
然后你可以检查它是否是ajax请求。(这不是最佳实践所必需的)
if ($this->request->is('ajax'))
// do your logic here
-
您应该将 echo $result 放在 reajax 函数中。
现在你的代码应该是这样的
function reajax($id = NULL)
$this->autoRender= false;
$result = "Some value";
echo $result;`enter code here`
它会帮助你。
【讨论】:
【参考方案4】:首先你应该回显你的结果然后退出你的函数或者让它 autoRender = false; 对于调试,您应该使用开发人员工具。
【讨论】:
以上是关于CakePHP Jquery.ajax()的主要内容,如果未能解决你的问题,请参考以下文章
Cakephp cake_core_ 缓存无法写入“cake_dev_en-us”
cakephp的 cake24CakeControllerBaseController.php
CakePHP 1.2 应用程序具有非常规的 Cake 路径抛出错误
CakePhp : Cake bake 在 Ubuntu 上不起作用。 (PDO异常)
php [cakephp:API组件和控制器]用于ajax请求和Server-Sent事件的Cake模块。 #cakephp