dsvs50005 2011-03-14 17:05
浏览 34
已采纳

使用Ajax和验证的Zend表单

Following "logical" Problem, i have an Controller with 2 Actions:

IndexAction: Display an Search Form, inside the view Script is an Div Tag to display search results.

The action validates the form:

    public function indexAction()
    {
        $searchForm = new My_Form_Search();
        $statsService =  new My_Service_Statistics();

        if ($this->getRequest()->isPost()) {
            if ($searchForm->isValid($this->getRequest()->getParams())) {
                $this->_forward('ajax-do-search');
            } else {
                //???
                // i want to display the errors
                exit();
            }
        }

        $this->view->search = $searchForm;
    }

public function ajaxDoSearchAction()
{
    $this->view->result = array();
    $searchForm = new My_Form_Search();

    if ($this->getRequest()->isPost()) {
        if ($searchForm->isValid($this->getRequest()->getParams())) {
            $query = $searchForm->getValue('search');
            $search = new My_Service_Search();
            $hits = $search->find($query);
            // more...

        }
    }
}

If valid it forwards to the Search action, and the view is rendered via Jquery.form in the defined div.

But what to do if the server side validation failed? without "exit();" the index action is displayed inside the result div.

I think the solution is simple, but to much code today :-)

I know i can prevent this with client side validation, but i thrust php :-

  • 写回答

1条回答 默认 最新

  • doukang5966907 2011-03-14 18:46
    关注

    Your design is bad IMO.

    Branch your code using $this->_request->isXmlHttpRequest().

    Then echo either whole page (no-js fallback) or only the errors/results

    if ($this->_request->isXmlHttpRequest()) {
        if ($form->isValid($post)) {
            $result = array('status'=>'ok', 'data' => $model->getResults());
            $this->_json($result);
        } else {
            $result = array('status'=>'error', 'data' => $form->getErrors());
            $this->_json($result);
        }
    } else {
        //like you would without ajax
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?