0

我正在尝试创建一个表单jQuery Dialog来使用 AJAX 保存一些数据。

我目前正在对话框中显示表单,这很好。

我有我的行动:

  $this->folderForm = new FolderForm(array(),array('user_template'=>$user_template));

  if ($request->isXmlHttpRequest()) 
  {
    if($request->isMethod('post'))
    {
        $this->folderForm->bind($request->getParameter('folder'));
        if($this->folderForm->isValid())
        {
            $values = $this->folderForm->getValues();

        } 
    }
  }

以上似乎工作正常。

问题是,如果表单通过 AJAX 无效,我将如何将表单发布到操作并显示错误消息?

谢谢

4

1 回答 1

1

您可以使用 json dataType 发布表单并返回包含有关表单是否有效或包含错误的信息的 json 响应。我假设您使用 jQuery 发布表单,因为您使用的是 jQuery-UI。

例如

// apps\myApp\modules\myModule\actions\action.class.php
public function executeEdit(sfWebRequest $request)
{
    $this->folderForm = new FolderForm(array(), array('user_template' => $user_template));

    if ($request->isMethod(sfRequest::POST) && $request->isXmlHttpRequest()) {
        $this->folderForm->bind($request->getParameter($form->getName()));

        $response = array();
        if ($this->folderForm->isValid()) {
            $folder = $this->folderForm->save();

            $response['errors'] = array();
        } else {
            foreach ($this->folderForm->getErrors() as $name => $error) {
                $response['errors'][] = array(
                    'field' => $name,
                    'message' => $error->getMessage(),
                );
            }
        }

        $this->getResponse()->setContentType('application/json');

        return $this->renderText(json_encode($response));
    }
}

然后在你的 javascript

$.post('/myModule/edit/id/' + id, $('my-form').serialize(), function (j) {
   var length = j.errors.length;
   if (length) {
       for (var i = 0; i < length; i++) {
           console.log(j.errors[i]);
           // Show error
       }
   } else {
       // Show success notification
   }
}, 'json');
于 2013-05-10T23:59:09.667 回答