2017-01-30 11 views
0

AJAXでSymfonyフォームを送信したいと思います。私はすでにそれをしましたが、私のコードでエラーを見つけることができません。 Submitをクリックすると、フォームが送信されますが、AJAXでは送信されません。AJAXで送信されたsymfonyフォーム

コントローラでフォームを作成します。

$form = $this->createForm(CorrectionReponseQRFormType::class, $passage)->createView(); 

小枝:

{{ form_start(form, {'id': 'formCorrection'~reponse.id}) }} 

     {{ form_widget(form.note, {'id': 'note'~reponse.id}) }} 

     {{ form_widget(form.commentaire, {'id': 'commentaire'~reponse.id}) }} 

     {{ form_row(form.submit) }} 
{{ form_end(form) }} 

<script> 
    var note = document.getElementById("note{{ reponse.id }}").value; 
    var idCommentaire = 'commentaire{{ reponse.id }}'; 

    var commentaire = CKEDITOR.instances[idCommentaire].getData(); 
    $("#formCorrection{{ reponse.id }}").submit(function() { 
     $.ajax({ 
      type: "POST", 
      url: "{{ path('paces_colle_correctioncolleqr_sauvegardercorrectionpassage') }}", 
      data: {note: note, commentaire: commentaire, idReponse: {{ reponse.id}}} 
     }) 
    }); 
</script> 

コントローラー機能:

public function sauvegarderCorrectionPassageAction(Request $request) 
{ 
    if ($request->isXmlHttpRequest()) { 
     $em = $this->getDoctrine()->getManager(); 

     $idReponse = $request->request->get('idReponse'); 
     $reponse = $em->getRepository(ReponseQR::class)->find($idReponse); 
     $note = $request->request->get('note'); 
     $commentaire = $request->request->get('commentaire'); 

     $passerColle = $em->getRepository(PasserColle::class) 
      ->findOneBy(array('colle' => $reponse->getColle()->getId(), 
       'user' => $reponse->getUser()->getId())); 

     $reponse->setCorrigee(true); 
     $passerColle->setNote($note); 
     $passerColle->setCommentaire($commentaire); 
     $em->persist($passerColle); 
     $em->flush(); 

     // Affichage 
     return false; 
    } 
} 
+0

あなたはAjaxリクエストコードを共有できますか? –

+0

これはTwigの最後です –

答えて

1

それはBECAです送信ボタンを使用すると、デフォルトでフォームが送信されます。

あなたはevent.preventDefault()

$("#formCorrection{{ reponse.id }}").submit(function(event) { 
     event.preventDefault(); 
     event.stopPropagation(); 
     $.ajax({ 
      type: "POST", 
      url: "{{ path('paces_colle_correctioncolleqr_sauvegardercorrectionpassage') }}", 
      data: {note: note, commentaire: commentaire, idReponse: {{ reponse.id}}} 
     }) 
    }); 
+0

私は既にこれを試していて、どちらもうまくいきません –

+1

#formCorrection {{reponse.id}} "があなたのDOMを正しくターゲットしていますか? 'event.stopPropagation();'を追加できますか? – goto

+0

フォームIDが正しく設定されていませんでした。この部分では現在作業中です。ありがとうございました。 –

2

使用するか、またはFALSEを返す使用することができます。このような関数の最後に

$("#formCorrection{{ reponse.id }}").submit(function(event) { 
     $.ajax({ 
      type: "POST", 
      url: "{{ path('paces_colle_correctioncolleqr_sauvegardercorrectionpassage') }}", 
      data: {note: note, commentaire: commentaire, idReponse: {{ reponse.id}}} 
     }); 
     return false; 
}); 
関連する問題