How to submit form ajax in symfony2?

24,350

Solution 1

With jQuery, use serialize() the form and post it to your route.

$('#form').submit(function(e) {

    e.preventDefault();
    var url = "{{ path('YOUR_PATH') }}";
    var formSerialize = $(this).serialize();
    
    $.post(url, formSerialize, function(response) {
        //your callback here
        alert(response);
    }, 'JSON');
});

In your action

if ($form->isSubmitted() && $form->isValid()) {

....

  // or return new JsonResponse($anyData);
  return new Response(json_encode(['status'=>'success']));
}

it must be ok like this. but you can add some parameters like the format, methods etc... in your routing.

Solution 2

For the Ajax:

 $("#person").submit(function(e){


    var formURL = "{{ path('form') }}";
    var formData = new FormData(this);
    $.ajax({
        url: formURL,
        type: 'POST',
        data:  formData,
        mimeType:"multipart/form-data",
        contentType: false,
        cache: false,
        processData:false,
        success: function(data, textStatus, jqXHR)
        {

        },
        error: function(jqXHR, textStatus, errorThrown)
        {
        }
    });
    e.preventDefault(); //Prevent Default action.
    e.unbind();
});
$("#person").submit();

And for Action

if ($request->isXmlHttpRequest()) {

....

    return new Response(json_encode(array('status'=>'success')));
}
Share:
24,350
Amr
Author by

Amr

Updated on July 29, 2022

Comments

  • Amr
    Amr almost 2 years

    I am about to submit my form Using Ajax,i have successfully submit my form using POST but don't know how to use Ajax with Symfony

    builform

        $builder->add('name', 'text', array('constraints' => array(new NotBlank()), 'attr' => array('placeholder' => 'Name')))
            ->add('gender', 'choice', array('empty_value' => 'Select Gender', 'constraints' => array(new NotBlank()), 'choices' => \AppBundle\Entity\Records::$gender_list, "required" => true))
            ->add('dateOfBirth', 'birthday', array('label' => 'Date Of Birth','required'=>true))
            ->add('image_path', 'file', array('label' => ' ','required'=>false, 'data_class' => null, 'constraints'=>array(new Assert\File(                                             array('mimeTypes'=>$mime_types, 'maxSize'=>'2048k' )))))
            ->add('country_of_birth', 'entity', array('empty_value' => 'Country of Birth',
                'class' => 'AppBundle\Entity\Location',
                'property' => 'country',
                'label' => 'Country of Birth'
            ))
            ->add('religion', 'entity', array('empty_value' => 'Select Religion',
                'class' => 'AppBundle\Entity\Religion',
                'property' => 'name',
                'label' => 'Religion'
            ));
    

    Action

            $success = false;
            $record_rep = new \AppBundle\Entity\Records();
            $form = $this->createForm(new \AppBundle\Form\AddPersonType(), $record_rep);
    
            if ($this->getRequest()->getMethod() == 'POST') {
                $form->submit($request);
                if ($form->isValid()) {
                    $data = $form->getData();
                    $file = $data->getImagePath();
                    $image = $file->getClientOriginalName();
    
                    $new_image_name = $this->hanldeUpload($image, $file);
                    $this->savetoDB($data, $record_rep, $new_image_name);
                    $success = true;
                }
            }
            return $this->render('AppBundle:Homepage:add_person_form.html.twig', array('form' => $form->createView(), 'success'=>$success ));
        }
    
  • Amr
    Amr about 9 years
    my action already render html so when i tried your solution it always render the success value = false,so it must do i need to handle in my view in addition that i have image so does this block ajax to be performed ?
  • Robert Wade
    Robert Wade over 7 years
    Looks like the last line of the top code block should be }); instead of } -HTH
  • Robert Wade
    Robert Wade over 7 years
    return new Response(json_encode(array('status'=>'success')); is missing a final closing parenthesis. Should be return new Response(json_encode(array('status'=>'success'))); -HTH
  • Miles M.
    Miles M. about 4 years
    Doesn't work with symfony 4 anymore. It says "Cannot check if an unsubmitted form is valid. Call Form::isSubmitted() before Form::isValid()."