Zend Framework:如何处理Ajax请求中的异常?

und*_*ack 5 php ajax error-handling zend-framework

通常,当引发异常时,错误控制器将执行命令并显示带有常规公共页眉和页脚的错误页面。

Ajax请求中不需要此行为。因为如果发生错误,整个html页面都会被发送出去。而且,如果我直接在div中加载http响应的内容,这甚至是多余的。

相反,在Ajax请求的情况下,我只想接收异常引发的“实际错误”。

我怎样才能做到这一点?

我认为,一种肮脏的方式可能是:在ajax请求中设置var并进行相应处理。不是一个好的解决方案。

Bal*_*an1 3

如果您使用 或contextSwitch操作ajaxContext助手来编码您的错误(可能关闭autoJsonSerialization),您可以将错误作为 JSON / XML 对象传递回来。

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.contextswitch

class Error_Controller extends Zend_Controller{
    public function errorAction(){
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addActionContext($this->getRequest()->getActionName(),'json')
            ->initContext();
        $errors = $this->_getParam('error_handler');
        $this->view->exception = $errors->exception;
    }
}
Run Code Online (Sandbox Code Playgroud)

从那里,您必须传递每个 AJAX 请求的 format=json 参数,或者设置一个自动附加它的路由链。

对于“稍微”更安全的设置,您可以使用 ajaxContext 作为助手,并且只有具有XMLHttpRequest标头的请求才会提供 json。