2016-05-26 6 views
0

私はフォームとajaxで送信されたいくつかの余分なデータを処理しようとしています。Symfony2はjQueryのシリアル化されたフォームとajaxポストで送信された余分なデータを扱います

$(document).on('submit', '#edit-entreprise', function (e) { 
     e.preventDefault(); 
     var $entreprise = $("#liste-entreprises").val(); 
     var $url = Routing.generate('load_edit_entreprise_form'); 
     var $formSerialize = $('#edit-entreprise').serialize() + "&entreprise=" + $entreprise; 
     $(".panel-entreprise").empty().append('<div class="progress"> <div class="indeterminate"></div> </div>'); 
     $.ajax({ 
      url: $url, 
      type: 'POST', 
      data: $formSerialize, 
      success: function(html) { 
       console.log(html); 
      } 
     }); 
    }); 

そしてここで、私のcontroler:ここ

は私のAjaxのポストコードです

public function editAction(Request $request) 
    { 
     $entreprise = $request->request->get('entreprise'); 
     $entreprise = $this->getDoctrine() 
      ->getRepository('AvisClientsBundle:Entreprise') 
      ->find($entreprise); 

     $editForm = $this->createForm('AvisClientsBundle\Form\EntrepriseType', $entreprise); 
     $editForm->handleRequest($request); 

     if ($editForm->isSubmitted() && $editForm->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($entreprise); 
      $em->flush(); 

      return new Response(json_encode(array('status' => 'success'))); 
     } 
     return new Response(json_encode($this->render('AvisClientsBundle:Admin/Entreprise:edit.html.twig', array(
      'entreprise' => $entreprise, 
      'edit_form' => $editForm->createView(), 
     ))->getContent())); 
    } 

私は、フォームや余分なデータを受信する方法がわからない:(

これを行う方法を教えてください。

ありがとう!

答えて

0

私はこのようにそれを行う:

アヤックス(私はFormDataを使用):SF2で

$('#formId').submit(function (event) { 
     // Eviter le comportement par défaut (soumettre le formulaire) 
     event.preventDefault(); 
     var $this = $(this); 

     $.ajax({ 
      url: $this.attr('action'), 
      type: $this.attr('method'), 
      data: new FormData($this[0]), 
      processData: false, 
      contentType: false, 
      error: function (request, status, error) { 
       callback(request.responseText); 
      }, 
      complete: function() { 
       // 
      }, 
      statusCode: { 
       //traitement en cas de succès 
       200: function (response) { 
        var message = response.message; 
        callback(response, event); 
       }, 
       412: function (response, event) { 
        callback(response); 
       } 
      } 
     }); 
    }); 

ここハンドラです:

public function updateAction(Request $request, $id) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('testBundle:testEntity')->find($id); 
     if (!$entity) { 
      throw $this->createNotFoundException('Unable to find entity.'); 
     } 
     $editForm = $this->createEditForm($entity); 
     $editForm->handleRequest($request); 

     if ($editForm->isValid()) { 
      $em->flush(); 
      //envoi des données JSON en front 
      $response = new JsonResponse(); 
      $response->setStatusCode(200); 
      //ajout de données éventuelles 
      $response->setData(array(
       'message' => "Ligne buffer updated", 
       'form' => json_encode($this->getHtmlForm($entity)))); 
      return $response; 
     } else { 
      //form non valide 
      //envoi des données d'erreurs JSON en front 
      $response = new JsonResponse(); 
      $response->setStatusCode(412); 
      $response->setData(array(
       'form' => json_encode($this->getHtmlForm($entity)), 
       'message' => $editForm->getErrorsAsString(), 
      )); 
      return $response; 
     } 
    } 
+0

こんにちは、あなたの答えをありがとうございました。私はajaxで送信されたフォームを投稿する方法を知っています。しかし、私はコントローラに余分なデータを共有する必要があります。私が望むのは、オブジェクトのIDである追加データを読み込み、オブジェクトからのデータであるフォームからデータを読み込むことです。 – laurentmichel

関連する問題