2016-04-06 1 views
0

Я пытаюсь отправить простой запрос AJAX с моего представления, и я использую JSON-представление cakePHP, чтобы сделать это, но я не могу get _serialize, чтобы предотвратить попытку контроллера искать файл ctp - я постоянно получаю сообщение об ошибке «Состояние 500: просмотр файла ... отсутствует». Я прочитал документы и несколько похожих вопросов о stackoverflow, и я не вижу, что мне не хватает.CakePHP 2.5.3 Статус 500 - Просмотр файла отсутствует при использовании JsonView _serialize

Я добавил 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 Метод «s beforeFilter - просто делает слово "нулевой":

$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); 
    } 
}); 

я не могу посмотрим, чего я не вижу! Есть идеи?

ответ

0

У меня было такое же сообщение об ошибке в аналогичном контексте; В моем случае это связано с тем, что метод, который я пытался вызвать, не прошел через функцию isAuthorized. Таким образом, он был перенаправлен на другой метод, который не предназначен для просмотра в формате json, и вот как появилось сообщение об ошибке «Состояние 500: просмотр файла ...».

Мне просто пришлось добавить соответствующее исключение для моего json-метода в функции isAuthorized и это исправлено.

Чтобы отладить эти типы ошибок, можно попытаться получить доступ к url ​​напрямую вместо этого через вызов ajax, потому что тогда будет показано соответствующее сообщение об ошибке разрешения.

+0

Это именно то, что оказалось - было одно место, которое я забыл, чтобы позволить типу пользователя получить доступ к новой модели. Aco_sync позаботился об этом. Это всегда мелочи ... –