【问题标题】:CakePHP Jquery.ajax()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。

标签: php jquery ajax cakephp


【解决方案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-&gt;autoRender = false;$this-&gt;viewBuilder-&gt;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
}
  1. 您应该将 echo $result 放在 reajax 函数中。

现在你的代码应该是这样的

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

它会帮助你。

【讨论】:

    【解决方案4】:

    首先你应该回显你的结果然后退出你的函数或者让它 autoRender = false; 对于调试,您应该使用开发人员工具。

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 1970-01-01
      • 2012-01-28
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2014-11-12
      相关资源
      最近更新 更多