Я пытаюсь отправить простой запрос 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);
}
});
я не могу посмотрим, чего я не вижу! Есть идеи?
Это именно то, что оказалось - было одно место, которое я забыл, чтобы позволить типу пользователя получить доступ к новой модели. Aco_sync позаботился об этом. Это всегда мелочи ... –