【发布时间】:2011-07-19 21:19:39
【问题描述】:
无法通过搜索(或谷歌)找到答案,所以我会自己问。 是否可以处理对 zend 框架的 JSONP 调用?
只找到这个页面:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme
但我不确定它是否已经实现!?
谢谢
【问题讨论】:
标签: php jquery ajax zend-framework jsonp
无法通过搜索(或谷歌)找到答案,所以我会自己问。 是否可以处理对 zend 框架的 JSONP 调用?
只找到这个页面:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme
但我不确定它是否已经实现!?
谢谢
【问题讨论】:
标签: php jquery ajax zend-framework jsonp
JSONP 只是一个 JSON 响应,包装在客户端上执行的指定回调函数中。
Zend_Json_Server 目前仅用于 JSON-RPC。您找到的链接是添加 JSONP 支持的存档(未实现)提案。
好消息是您不需要任何类型的框架来支持 JSONP。假设$response是你希望返回给用户的数据,而$callbackcontains the sanitized callback:
echo $callback, '(', json_encode($response), ');';
多田,你已经 JSONP 了。
请仔细阅读我链接的有关清理回调的文档。未能清理回调可能会导致可利用的条件。
【讨论】:
对于那些使用 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 > SCRIPTS > 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+")");
}
});
也许这对某人有帮助...
【讨论】: