CakePHP Jquery.ajax()

时间:2011-09-01 08:32:16

标签: php jquery ajax cakephp

好吧,我是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);
                   },
               })
           });
    })

4 个答案:

答案 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
}
  1. 你应该在reajax函数中放入echo $ result。
  2. 现在你的代码应该是这样的

    function reajax($id = NULL) {       
            $this->autoRender= false;
            $result = "Some value";
            echo $result;`enter code here`
        }
    

    它会帮助你。

答案 3 :(得分:-1)

首先你应该回显你的结果然后退出你的函数或使它成为autoRender = false; 对于debuging你应该使用开发人员工具。