повторите что-то после сериализации json в CakePHP


Как я могу повторить что-то в конце ответа CakePHP json/xml?

Мне это нужно, чтобы добавить поддержку JSONP (потому что мне нужно добавить обратный вызов в начале и ');' в конце

Контроллер использует это:

public function json() {

     //...code to populate $jsonObjects

     $this->set('objetos',$jsonObjects);
     $this->set('_serialize', 'objetos');
}
Author: Flores Robles, 2012-11-28

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 обратного вызова, чтобы не оставить дыру в безопасности, выведя именно то, что указано в параметре строки запроса.

 4
Author: inki, 2012-11-27 20:41:18