0

jQuery DialogAJAX を使用してデータを保存するフォームを作成しようとしています。

現在、ダイアログにフォームを表示していますが、これで問題ありません。

私は自分の行動に持っています:

  $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-UI を使用しているため、フォームを jQuery で投稿していると仮定します。

例えば

// 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 に答える