我需要一个 jsonp 来使用 openlayers 的边界框功能,我做了这样的事情:
在控制器功能中:
$this->layout = false;
// get the callback from the request
$callback = $this->request->query['callback'];
$data = // do something usefull...
$this->set('callback', $callback);
$this->set('json', $data);
$this->render('../Elements/jsonp');
和元素:
<?php
$tmp = json_encode($json);
/* Generic JSON template */
if(!isset($debug)){
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
//header('Content-Type: application/json');
}
echo $callback . '({ "type": "FeatureCollection",
"features": ' . $tmp . '});';
;
?>
正如你所看到的,我做了一些懒惰的编程来在元素中“构建”输出格式。这很容易针对其他形式的数据进行修改。
编辑:
您不需要使用扩展,因为您在控制器中调用了一个函数。
使用 Config/routes.php
http://book.cakephp.org/2.0/en/development/routing.html#file-extensions中的选项
Router::parseExtensions('xml', 'json');
控制器中的函数名将是:
json_myfunction(){ ...
URL 将变为:
localhost/json/mycontroller/myfunction?param1=...