2012-05-20 76 views
3

当通过AJAX发送请求时,如何停止布局渲染.. 我面对的问题是json数据在浏览器上回显,而不是传递给回调函数jquery停止使用自定义路由的Ajax请求的布局渲染

,这里是我的脚本

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框架的开发!

回答

1

在操作,你只需要使用

$this->_helper->json($appPrivArray) 

你并不需要使用setNoRender或其他任何东西。 而在Javascript中,你不需要使用dataType: 'JSON', 我测试了这个,应该可以正常工作。

+0

我把所有评论drew010 answer.please检查出来。 – palAlaa

+1

如果仍然得到布局,则存在一种可能性,即操作中存在错误,并且布局显示异常消息和堆栈跟踪,而不仅仅返回json。你有没有检查过返回的代码,看看是否有任何异常消息? – Salman

+0

我面临的问题是在路由中,我有两个同名的路由,所以这是问题.. – palAlaa

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')不能运行?

+0

现在js中发生错误,并警告此<! - application/layouts/scripts/layout.phtml - >和布局的整个html! – palAlaa

+0

@Salman,我照你说的做,现在它警惕你好,胸围仍然提醒布局脚本! – palAlaa

+0

我提醒('hello'+特权);它提醒布局页面 – palAlaa