2016-03-25 5 views
1

Я новичок в symfony и ajax, я хочу отправить форму без обновления страницы каждый раз, когда я шел вместе с учебником this, все, что работает на странице, отправляется в базу данных, но проблема в том, что i получите это сообщение в браузереJson response отображается

{"message":"Success!"} 

Это то, что я имею в своем контроллере.

$bon = new Bons(); 
    $form = $this->createForm('AppBundle\Form\BonsType', $bon); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($bon); 
     $em->flush(); 

     return new JsonResponse(array('message' => 'Success!'), 200); 
    } 

    return $this->render('bons/new.html.twig', array(
     'bon' => $bon, 
     'form' => $form->createView(), 
    )); 

Аякс части:

$(document).ready(function() { 
     $('body').on('submit', '.myForm', 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); 
       } 

      }); 
     }); 
    }); 

есть ли способ представить форму без перенаправления или обновить страницу

+0

Сначала вы сказали, что сделали этот код, потому что не хотите, чтобы ссылка resh страницу каждый раз и внизу вы спрашиваете, есть ли способ обновить страницу ... что это такое? – Chris

+0

О, я не заметил этого, я на самом деле имел в виду первое, отправляя без обновления –

ответ

0

Оказывается, ваша проблема была очень проста. Вам просто нужно добавить DATATYPE так:

$.ajax({ 
    type: $(this).attr('method'), 
    dataType: "json", 
    url: $(this).attr('action'), 
    data: $(this).serialize() 
}) 

Я хочу показать вам, что я обычно делаю

Мой файл PHP выглядит следующим образом:

$json = array(); 
$my_variable = $_POST('variable_name'); // or however I get the value 
if(something == something) 
    $json['success'] = 'It was successful'; 
else 
    $json['error'] = 'Something went wrong'; 
die(json_encode($json)); 

My JS выглядит это:

$('.update_class').click(function(){ 
    var variable_I_am_sending = $(this).data('something'); 
    $.post('path_to_php', {variable_name: variable_I_am_sending}, function(data, result, xhr){ 
     if(result == 'success') 
      if(data.success) 
       alert(data.success); 
      else 
       alert(data.error); 
     else 
      alert('ajax call failed'); 
    }, "json"); 
}); 
+0

Спасибо, что ответили Крису, что я получаю {{message ":" Success! "} В браузере, вместо этого хочу получить это сообщение в поле предупреждения –

+0

Если data.message предоставляет вам {"message": "Success!"} Это означает, что объект выглядит следующим образом: {"message": {"message": "Success!"}} , Итак, что вы можете попробовать: data.message.message Можете ли вы сделать мне одолжение и добавить это перед вашим предупреждением и сообщить мне, что он выводит на консоль: console.log (data); – Chris

+0

Это то, что я получаю после нажатия кнопки отправки. [link] (http://prnt.sc/ajnm5k), я также попробовал data.message.message, но получил тот же результат. –