【问题标题】:cakephp 2.1 json error 404 for jquery getcakephp 2.1 json 错误 404 用于 jquery 获取
【发布时间】:2012-10-02 04:26:32
【问题描述】:

使用 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;

请帮忙。

非常感谢。

【问题讨论】:

    标签: jquery json cakephp


    【解决方案1】:
    var path = "/dirs/getdirs/101.js";
    

    不应该这样吗

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

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

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

    $this->autoRender = false;
    

    你需要手动调用render

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

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

    【讨论】:

    • 谢谢dubvfan;固定为 .json 扩展名并删除了自动渲染; Firebug 响应为:“NetworkError: 404 Not Found - dev.opm.asc/dirs/getdirs/101.json”。未找到该操作的可能原因是什么? .双重检查动作名称;请参阅更新后的帖子。请帮忙。
    • 我想你想要 $dirArray = $this->Dir->find('all');没有“s”,因为模型有单数名称。
    • 没错。修复了这个问题,但仍然收到“NetworkError: 404 Not Found - dev.opm.asc/dirs/getdirs/101.json” :-( 我会继续搜索薄 404 错误。嗯(编辑过的帖子)。非常感谢!
    • 检查您的路线并确保您的 mod_rewrite 正在使用正确的 .htaccess 文件。
    • 谢谢 dubvfan87;发现问题并作为另一个回应。再次感谢您!
    【解决方案2】:

    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-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多