通过AJAX渲染带有错误的表单

时间:2014-05-14 01:34:20

标签: ajax forms symfony

我有一个名为" myAction"这将呈现我的项目的主页。此视图(页面)是一个2列布局,左侧有一个包含数据库中所有项目的表。

在右侧,我会渲染项目简历或新项目表格,视情况而定。

当用户点击" New Project"按钮,表单通过load() jQuery函数呈现。因此,当表单验证时,项目将被保存,您的简历将在布局的右侧呈现(删除表单),但是当表单无效时,我希望呈现带有错误的表单。

所有表单请求都发送到newAction()方法控制器。

AJAX请求是:

$.ajax({
   url: $form.attr('action'),
   type: $form.attr('method'),
   dataType: 'json',
   data: $form.serialize(),
   success: function(response){
      var object = JSON.parse(response);
      if(object.success){
         $("#ProjectList").load(Routing.generate('project_my'));
         fn_render_resumen(object.message);
      }else{
         // The form is invalid.
      }
   }
});

ProjectController中的newAction是:

public function newAction(Request $request){
   $project = new Project();
   $form = $this->createForm(new ProjectType(), $project);

   if($request->isMethod('POST')){
      $form->bind($request);
      $response = array();

      if($form->isValid()){
         // Persist in the database...
         $response['success'] = true;
         $response['message'] = $project->getSlug();
      }else{
         // Here need send the form with errors to the view.
      }
      return new JsonResponse(json_encode($response));
   }
   return $this->render('aView.html.twig',Array('form' => $form->createView()));
}

那么,有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您不需要将json_encode数据传递给JsonResponse;就这样做:

return new JsonResponse($response);

试试这个:

if($form->isValid()){
    // Persist in the database...
    $response['success'] = true;
    $response['message'] = $project->getSlug();
}else{
    $formHtml = $this->container
        ->get('templating')
        ->render('aViewForm.html.twig',Array('form' => $form->createView()));
    $response['success'] = false;
    $response['form'] = $formHtml;
}
return new JsonResponse($response);

其中aViewForm.html.twig是仅呈现表单的模板。例如,它可能如下所示:

{{ form }}

您将拥有完整的HTML代码(有错误)。像这样:

{"success":false,"form":"\u003Cform\u003E...\u003C\/form\u003E"}

然后你可以用JS脚本处理它。