通过AJAX发送请求时,如何停止布局渲染? 我面临的问题是json数据在浏览器上回显,没有传递给jquery的tha回调函数
这是我的剧本
jQuery.ajax({
url: "/getPrivileges",
type: "POST",
dataType: 'JSON',
success: function(privileges){
alert('hellooo');
buildTree(privileges,".privBox h2");
if($(".privPrivilege"))
$("#loading").css("visibility","hidden");
},
error: function (request, status, error) {
alert('Error'+request.responseText);
}
});
这是路由
resources.router.routes.privilege.route = /getPrivileges
resources.router.routes.privilege.defaults.module = privileges
resources.router.routes.privilege.defaults.controller = privilege
resources.router.routes.privilege.defaults.action = get-privileges
这是我的控制器
public function getPrivilegesAction() {
if ($this->getRequest()->isXmlHttpRequest()) {
...........
...........
$this->_helper->json($appPrivArray);
$this->_helper->viewRenderer->setNoRender(TRUE);
$this->_helper->layout->disableLayout();
$response = $this->getResponse();
$response->setHeader('Content-type', 'application/json', true);
}
}
首先我面对的是仍然呈现的布局,但现在json被打印在屏幕上,即使我没有get-privileges.phtml视图页面。
并且在控制器的init()方法中,我这样做
public function init() {
$ajaxContextSwitch = Zend_Controller_Action_HelperBroker::getStaticHelper('AjaxContext');
$ajaxContextSwitch->setDefaultContext('json');
$ajaxContextSwitch->addActionContext('getPrivileges', 'json');
$ajaxContextSwitch->initContext();
}
如何将响应传递给jquery的回调函数! 值得一提的是,并非所有网址都有自定义路由..
请帮助,因为我几乎将使用Zend框架退出开发!!答案 0 :(得分:1)
通过“在浏览器上回显”将JSON数据返回到jQuery(或任何其他库)。这就是回调接收数据的方式。
JSON视图助手会为您禁用布局,并将Content-Type
标头设置为application/json
,因此您不必这样做。
如果您没有针对给定操作的视图脚本,则可以继续使用setNoRender(true)
。
我认为此代码应该可以正常工作:
public function getPrivilegesAction() {
if ($this->getRequest()->isXmlHttpRequest()) {
$this->_helper->viewRenderer->setNoRender(TRUE);
$this->_helper->json($appPrivArray);
}
}
您是否收到任何Javascript错误或alert('hello')
未运行?
答案 1 :(得分:1)
在动作中,您只需要使用
$this->_helper->json($appPrivArray)
您无需使用setNoRender
或其他任何内容。
在Javascript中,您不需要使用dataType: 'JSON',
我测试了这个,应该可以正常工作。