2015-10-09 4 views
0

Я хочу сохранить объект с помощью ajax и symfony. но всегда получаю сообщение об ошибке. это мой кодsubmit form ajax symfony

<form id="form" class="full_form" {{form_enctype(form)}} action="{{ path('add_contact') }}" method="post" > 
<div class="left small_width"> 

    <div class="section-title">Ajout d'un contact</div> 
    <span>Les champs suivis d’une étoile sont obligatoires</span> 
    {{ form_widget(form.name,{ 'attr': {'maxlength': '50','placeholder':'placeholder.nom'|trans} }) }} 
    {{ form_widget(form.lastName, { 'attr': {'maxlength': '50','placeholder':'placeholder.prenom'|trans} }) }} 
    {{ form_widget(form.countryId,{ 'attr': {'maxlength': '50','placeholder':'placeholder.contact.country'|trans} }) }} 
    {{ form_widget(form.gsmPrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.gsmPrimary'|trans} }) }} 
    {{ form_widget(form.gsmSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.gsmSecondary'|trans} }) }} 
    {{ form_widget(form.landlinePrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.landlinePrimary'|trans} }) }} 
    {{ form_widget(form.landlineSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.landlineSecondary'|trans} }) }} 
    {{ form_widget(form.faxPrimary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.faxPrimary'|trans} }) }} 
    {{ form_widget(form.faxSecondary, { 'attr': {'maxlength': '50','placeholder':'placeholder.contact.faxSecondary'|trans} }) }} 
    {{ form_widget(form.streetNumber) }} 

в моем Java коде сценария:

<script> 
    initAjaxForm(); 
</script> 

в моем main.js

 function initAjaxForm() 
    { 
     $('body').on('submit','full_form',function(e) { 


e.preventDefault(); 

     $.ajax({ 
      type: $(this).attr('method'), 
      url: $(this).attr('action'), 
      data: $(this).serialize() 
     }) 
      .done(function (data) { 
       if (typeof data.message !== 'undefined') { 
        alert(data.message); 
       } 
      }) 
      .fail(function (jqXHR, textStatus, errorThrown) { 
       if (typeof jqXHR.responseJSON !== 'undefined') { 
        if (jqXHR.responseJSON.hasOwnProperty('form')) { 
         $('#form_body').html(jqXHR.responseJSON.form); 
        } 

        $('.form_error').html(jqXHR.responseJSON.message); 

       } else { 
        alert(errorThrown); 
       } 

      }); 

    }); 
} 

и, наконец, в моем контроллере. действие create показано следующим образом.

public function createAction(Request $request) 
    { 

if (!$request->isXmlHttpRequest()) { 
    return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400); 
} 
     $contact = new Contact(); 
     $form = $this->createForm(new ContactType(), $contact); 


     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
       $em->persist($contact); 
      // $em->persist($label); 
      $em->flush(); 
      return new JsonResponse(array('message' => 'Success!'), 200); 

     } 
    $response = new JsonResponse(
      array(
       'message' => 'Error', 
       'form' => $this->renderView('MyBundle:Contact:new.html.twig', 
        array(
         'entity' => $contact, 
         'form' => $form->createView(), 
         'form2' => $form2->createView() 
        ))), 400); 

     return $response; 

, но всегда я получаю сообщение об ошибке: «Вы можете получить доступ к этому только с помощью ajax».

Есть ли какой-нибудь пример, показывающий нам, как мы можем отправить форму с помощью ajax. Я попробовал два примера, найденных в сети, но всегда один и тот же результат.

+0

Похоже, ваш код javascript не работает. Проверьте ошибки javascript на консоли, например, Firebug или какой-либо подобный инструмент. Например, я вижу опечатку в $ ('body'). On ('submit', 'full_form', function (e) {, вы забыли добавить «.» Перед «full_form». – viktor77

ответ

0

вы можете использовать ajaxSubmit, чтобы отправить форму, как это:

$('input[type="submit"]').click(function() { 
    $('#form').submit(function(e){ 
     e.preventDefault(); 
     $(this).ajaxSubmit(
     { 
      url: "{{ path('add_contact') }}", 
      type: "POST", 
      success: function (result) 
      { 
       $('#form_body').html(result); 
      } 
     }); 
    }); 
}); 

или вы можете также отправить форму, как это:

$('input[type="submit"]').click(function() { 
     $('#form').submit(function(e){ 
      e.preventDefault(); 
      $.ajax(
      { 
       url: "{{ path('add_contact') }}", 
       type: "POST", 
       data: $('#form').serialize(), 
       success: function (result) 
       { 
        $('#form_body').html(result); 
       } 
      }); 
     }); 
    }); 

Надежда, что помогает

+0

Я проверю это, спасибо вы очень –

0

$('body').on('submit','.full_form',function(e) { ... }

full_form должен иметь префикс с точкой.

Но попробуйте проверить, работает ли ваш скрипт javascript как viktor77.