在 ZEND 中处理 JSONP 调用
Posted
技术标签:
【中文标题】在 ZEND 中处理 JSONP 调用【英文标题】:handle JSONP calls in ZEND 【发布时间】:2011-07-19 21:19:39 【问题描述】:无法通过搜索(或谷歌)找到答案,所以我会自己问。 是否可以处理对 zend 框架的 JSONP 调用?
只找到这个页面:
http://framework.zend.com/wiki/display/ZFPROP/Zend_Json_Server+-+Lode+Blomme
但我不确定它是否已经实现!?
谢谢
【问题讨论】:
【参考方案1】:JSONP 只是一个 JSON 响应,包装在客户端上执行的指定回调函数中。
Zend_Json_Server 目前仅用于 JSON-RPC。您找到的链接是添加 JSONP 支持的存档(未实现)提案。
好消息是您不需要任何类型的框架来支持 JSONP。假设$response
是你希望返回给用户的数据,而$callback
contains the sanitized callback:
echo $callback, '(', json_encode($response), ');';
多田,你已经 JSONP 了。
请仔细阅读我链接的有关清理回调的文档。未能清理回调可能会导致可利用的条件。
【讨论】:
嗨,查尔斯。感谢您的快速回复。我知道我不必使用任何框架,但如果我已经是... :) 将阅读有关消毒的文档并尝试使用 zend 框架来实现它。如果有效,将发布。谢谢 终于有时间检查这个了——它真的很好用。谢谢。【参考方案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 > 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+")");
);
也许这对某人有帮助...
【讨论】:
以上是关于在 ZEND 中处理 JSONP 调用的主要内容,如果未能解决你的问题,请参考以下文章