无法通过搜索(或谷歌)找到答案,所以我会自己问一下。 是否可以处理对zend框架的JSONP调用?
只找到了这个页面:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme
但我不确定它是否已经实施!?
THX
答案 0 :(得分:9)
JSONP只是一个JSON响应,它包含在客户端上执行的指定回调函数中。
目前Zend_Json_Server仅适用于JSON-RPC的 。您找到的链接是一个存档(未实现)的提议,用于添加JSONP支持。
好消息是您不需要任何类型的框架来支持JSONP 。假设$response
是您希望返回给用户的数据,并$callback
contains the sanitized callback:
echo $callback, '(', json_encode($response), ');';
Tada,你已经JSONP了。
请注意阅读我关于清理回调的链接文件。未能清理回调可能会导致可利用的情况。
答案 1 :(得分:2)
对于那些使用ZEND框架的人,想知道我必须改变什么才能让这个工作......
必须对几个文件进行更改:
1)在VIEWS>下添加了新的布局LAYOUTS称为json.phtml
<?php
header('Content-type: application/javascript');
echo $this->layout()->content;
?>
2)控制器
添加了一个名为jsonAction的新动作
public function jsonAction()
{
$this->_helper->layout->setLayout('json');
$callback = $this->getRequest()->getParam('callback');
if ($callback != "")
{
// strip all non alphanumeric elements from callback
$callback = preg_replace('/[^a-zA-Z0-9_]/', '', $callback);
}
$this->view->callback = $callback;
// ...
}
3)在VIEWS&gt;下添加了一个新视图脚本&gt; json.phtml
<?php
if ($this->callback != "")
{
echo $this->callback, '(', json_encode($response), ');';
}
else
{
echo json_encode($response);
}
?>
现在我可以像这样通过jquery进行ajax调用:
$.ajax({
type: "GET",
url: 'http://<your_url>/<your_controller>/json',
data: {},
dataType: "jsonp",
success: function(json) {
console.log("success");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("error("+jqXHR+", "+textStatus+", "+errorThrown+")");
}
});
也许这有助于某人...