2017-01-30 57 views
0

我想用AJAX发送Symfony表单。我已经做到了,但在代码中找不到错误。当我点击提交时,它发送表单,但不是通过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

它在树枝 –

回答

1

这是贝科使用提交按钮默认提交表单。

您可以使用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; 
});