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()).
//Kontroler public function indexAction(Request $request) { )); $form->handleRequest($request); if($request->isXmlHttpRequest()) { if ($form->isValid()) { if($post = $this->addPost($form->getData())) { $json = json_encode( 'id' => $post->getId() ) ); $response = new Response($json); $response->headers->set('Content-Type', 'application/json'); return $response; } } $json = json_encode( 'error' => json_encode($request->request->get('post')) ) ); $response = new Response($json); $response->headers->set('Content-Type', 'application/json'); return $response; } $limit = 10; $offset = NULL; }
//FormType { $builder 'label' => 'Treść: ', )) ->add('Opublikuj', 'submit'); }
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>
{{ 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...