1

使用 cake 2.1,我试图通过 ajax 获取 json 记录列表。找不到缺少的东西:

在 routes.php 上,添加了:

Router::parseExtensions('json');

我的控制器中的操作:

public function getdirs($id = null) {
    $this->RequestHandler->setContent('json', 'application/json');
    $dirArray = $this->Dir->find('all');
    debug($dirArray);
    $this->set('dirArray', $dirArray);
    $this->set('_serialize', 'dirArray');
}

在我看来,(编辑父记录-101-并需要获取其子记录),我正在使用这个jquery:

function updateTable() {
    var path = "/dirs/getdirs/101.json"; 
    $.post(path,null,function(data) {
    //$.get(path, function(data) {
        alert('backFromServer');
        alert(data);
    });        
}

未达到“backfromserver”警报。另外,我不确定如何测试错误可能在哪里。

一旦我获得了 json 数据,将在我的视图中填充一个 div 部分,这部分我已经涵盖,但需要来自服务器的数据。

我真的很感谢一些帮助,这几天一直在努力解决这个问题。

谢谢 !!

更新 固定为 .json 扩展名并删除了自动渲染;萤火虫的反应是:

{"code":"404","url":"\/dirs\/getdirs\/101.json","name":"Controller class Controller could not be found."}

"NetworkError: 404 Not Found - http://dev.opm.asc/dirs/getdirs/101.json"

仔细检查了我的操作,它被称为 getdirs 好吧:

public function getdirs($id = null) {
    $this->RequestHandler->setContent('json', 'application/json');
    $dirArray = $this->Dir->find('all');
    debug($dirArray);
    $this->set('dirArray', $dirArray);
    $this->set('_serialize', 'dirArray');
}

未找到该操作的可能原因是什么?

至于通用视图,在这种情况下,我只想获取数据数组并填充一些 div;

请帮忙。

太感谢了。

4

2 回答 2

0
var path = "/dirs/getdirs/101.js";

这不应该是

var path = "/dirs/getdirs/101.json";

尝试安装 firebug - http://getfirebug.com/或按 F12,如果您使用的是 chrome for chrome 的开发人员工具。这将使您设置调试http。尝试网络选项卡。您可以检查请求并查看错误的确切位置。这将使您确切地看到正在发送的内容和正在接收的内容。

另外,不确定您是否发布了部分代码,但如果您这样做:

$this->autoRender = false;

你需要手动调用渲染

$this->render('path/to/view');

我建议创建一个通用视图,您可以在输出 json 的操作之间共享。

于 2012-09-17T23:43:37.957 回答
0

404 错误是由于我在控制器顶部定义的权限造成的,例如:

public function isAuthorized($user) {
    $AuthAddRoles = array(0, 1);
    if ($this->request->action === 'add') {
        if (in_array($this->Auth->user('role'), $AuthAddRoles)) {
            return true;
        }
    }
}

我只需要以相同的方式授权 ajax 操作,它就解决了。

感谢 dubvfan87 提供的所有好的指点。现在json响应开头自带代码,这里解决:cakephp render-false action still echoes html template

于 2012-10-01T19:53:42.070 回答