2013-05-09 100 views
0

我試圖在jQuery Dialog中創建一個表單來保存一些使用AJAX的數據。symfony1.4 - ajax表單和驗證

我目前在diaog中顯示錶單,這很好。

我在行動:

$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如何將表單發佈到操作並顯示錯誤消息?

感謝

回答

1

您可以使用JSON的dataType發佈形式,並返回一個包含有關表單是否有效或包含錯誤信息的JSON響應。 我假設你用jQuery發佈表單,因爲你使用的是jQuery-UI。

E.g.

// 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');