Witam.

Mam problem z ajaxowym dodawaniem do bazy danych. Szukałem informacji na Stackoverflow, dokumentacji i nic.

Bez ajax dodawanie działa prawidłowo (oczywiście jeżeli zakomentuje if($request->isXmlHttpRequest()).

  1. //Kontroler
  2.  
  3. public function indexAction(Request $request)
  4. {
  5. $form = $this->createForm(new AddPostType(), NULL, array(
  6. 'attr' => array('id' => 'ajax_post_add')
  7. ));
  8.  
  9. $form->handleRequest($request);
  10. if($request->isXmlHttpRequest())
  11. {
  12. if ($form->isValid())
  13. {
  14. if($post = $this->addPost($form->getData()))
  15. {
  16. $json = json_encode(
  17. 'id' => $post->getId()
  18. )
  19. );
  20. $response = new Response($json);
  21. $response->headers->set('Content-Type', 'application/json');
  22. return $response;
  23. }
  24. }
  25. $json = json_encode(
  26. 'error' => json_encode($request->request->get('post'))
  27. )
  28. );
  29. $response = new Response($json);
  30. $response->headers->set('Content-Type', 'application/json');
  31. return $response;
  32. }
  33.  
  34. $limit = 10;
  35. $offset = NULL;
  36. $posts = $this->getPosts(array('created' => 'DESC', 'id' => 'DESC'), $limit, $offset);
  37.  
  38.  
  39.  
  40. return array('posts' => $posts, 'form' => $form->createView());
  41. }


  1. //FormType
  2.  
  3. public function buildForm(FormBuilderInterface $builder, array $options)
  4. {
  5. $builder
  6. ->add('content', 'textarea', array(
  7. 'label' => 'Treść: ',
  8. 'attr' => array('cols' => '30', 'rows' => '5')
  9. ))
  10. ->add('Opublikuj', 'submit');
  11. }


Kod
//Template

{{ form(form) }}

<div id="post_list"></div>

<script type="text/javascript">
        $(function(){

            console.log('ready!');

            $('#ajax_post_add').find('button').click(function(e){
                console.log('clicked!');
                e.preventDefault();
                var $form = $(this).parent().find('#ajax_post_add');
                var $textarea = $form.find('textarea');
                var $url = $form.attr('action');
                var $data = $form.serialize();

                $.ajax({
                    url: $url,
                    data: $data,
                    method: 'post',
                    dataType: 'json',
                    cache: false,
                    success: function(obj){
//                        $('#post_list').prepend(obj.id);
                        alert(obj.error);
                        console.log('success');
                    },
                    complete: function(){
                        console.log('complete');
                    },
                    error: function(err){
                        console.log('error');
                        console.log(err);
//                        alert(err.error);
                    }
                });
            });

        });
    </script>


W Profilerze sprawdziłem i gdy dodaje bez ajax mam Response Content -> my_frontendbundle_addposttype%5Bcontent%5D=asdasd&my_frontendbundle_addposttype%5BOpublikuj%5D=

a z AJAX -> Request content not available (it was retrieved as a resource).

Nie mam pojęcia co z tym zrobić ;/

Do zamknięcia... Błąd był w funkcji jQuery...