CakePHP 2.5.3状态500 - 使用JsonView _serialize时缺少视图文件

时间:2016-04-06 22:16:46

标签: cakephp cakephp-2.5

我正在尝试从我的视图发送一个简单的AJAX请求,我正在使用cakePHP的JSON视图来执行此操作,但我无法获得_serialize以防止控制器寻找ctp文件 - 我始终如一得到“状态500:查看文件...缺少”错误。我已经阅读了关于stackoverflow的文档和几个类似的问题,我看不出我错过了什么。

我已将requesthandler添加到AppController的初始化函数中:

public function initialize() {
    $this->loadComponent('RequestHandler');
}

已启用扩展程序:

Router::parseExtensions('json');
require CAKE . 'Config' . DS . 'routes.php';

我已将该组件添加到我的控制器中:

class StudentsController extends AppController {
    public $name = 'Students';
    public $components = array('RequestHandler');

唯一似乎改变它的是当我将以下代码添加到AppController的beforeFilter方法时 - 只需呈现单词“null”:

$this->RequestHandler->renderAs($this, 'json');
$this->response->type('application/json');
$this->set('_serialize', true);

这是我的控制器方法:

public function set_rating() {
    $this->autoLayout = false;
    $this->autoRender = false;
    $this->response->type('application/json');

    $studentID = (int) $this->request->data['studentID'];
    $rating = (int) $this->request->data['rating'];

    $this->Student->id = $studentID;
    if($this->Student->saveField('rating', $rating)) {
        $this->set('success', 1);
    }
    else{
        $this->set('success', 0);
    }
    $this->set("_serialize", array("success"));
}

和Ajax请求:

$.ajax({
    url: '<?php echo $this->webroot . $this->params["controller"]; ?>/set_rating.json',
    type: "POST",
    dataType: "json",
    data:  {studentID: text, rating: value},
    success: function(response) {
        if(response['success'] == 1){
            manageFlashMessage('alert-success', 'Rating saved.');
        }
        else {
            manageFlashMessage('alert-danger', 'Sorry, something went wrong');
        }
    },
    error: function (xhr, status, error) {
       console.log(xhr.status);
       console.log(xhr.responseText);
       console.log(status);
    }
});

我看不到我错过的东西!有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我在类似的上下文中有相同的错误消息;在我的情况下,这是因为我试图调用的方法没有通过 isAuthorized 函数。因此,它被重定向到另一个方法,该方法不打算以json格式查看,这就是“状态500:查看文件...缺失”的错误信息。

我只需要在isAuthorized函数中为我的json方法添加适当的异常并修复它。

要调试这些类型的错误,可以尝试直接访问url而不是通过ajax调用,因为这样会显示相应的权限错误消息。