повторите что-то после сериализации json в CakePHP
Как я могу повторить что-то в конце ответа CakePHP json/xml?
Мне это нужно, чтобы добавить поддержку JSONP (потому что мне нужно добавить обратный вызов в начале и ');' в конце
Контроллер использует это:
public function json() {
//...code to populate $jsonObjects
$this->set('objetos',$jsonObjects);
$this->set('_serialize', 'objetos');
}
1 answers
Во-первых, я предполагаю, что у вас есть маршруты, настроенные для правильной обработки ответов JSON/XML
В файле маршрутов:
Router::parseExtensions('json');
Во-вторых, вам нужно будет убедиться, что вызов вашего примера использует расширение .json
или заголовок Accept application/json
Затем вы проверяете наличие обратного вызова в своем контроллере
public function json() {
//...code to populate $jsonObjects
// check for callback and set it
// note: you should do Sanitize::clean() or something like that to
// prevent code injection
if ($this->request->params['callback']) {
$this->set('callback', $this->request->params['callback']);
}
$this->set('objetos',$jsonObjects);
$this->set('_serialize', 'objetos');
}
В вашем файле представления (например, View/Users/json/index.ctp) у вас должно быть что-то вроде этого:
if (isset($callback)) {
echo $callback . '('.json_encode($objetos).')';
} else {
echo json_encode($objetos);
}
Я использую нечто подобное, но не проверял точное пример выше, так что вам, возможно, придется его очистить. Также убедитесь, что вы очистили var обратного вызова, чтобы не оставить дыру в безопасности, выведя именно то, что указано в параметре строки запроса.