2

CakePHP json/xml 応答の最後に何かをエコーするにはどうすればよいですか?

JSONP サポートを追加するためにこれが必要です (最初にコールバックと ');' を追加する必要があるためです)。最後に

コントローラーはこれを使用します:

public function json() {

     //...code to populate $jsonObjects

     $this->set('objetos',$jsonObjects);
     $this->set('_serialize', 'objetos');
}
4

1 に答える 1

4

まず、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);
}

私は似たようなものを使用していますが、上記の正確な例をテストしていないので、クリーンアップする必要があるかもしれません. また、コールバック変数をクリーンアップして、クエリ文字列パラメーターの内容を正確に出力してセキュリティ ホールを残さないようにしてください。

于 2012-11-27T20:41:18.287 に答える