2016-03-25 8 views
1

Ich bin neu in Symfony und Ajax, ich möchte ein Formular ohne Aktualisierung der Seite jedes Mal, wenn ich zusammen mit this Tutorial folgte, alles funktioniert die Seite reicht der Datenbank, aber das Problem ist, dass ich Holen Sie sich diese Nachricht im BrowserJson Antwort angezeigt

{"message":"Success!"} 

Das ist, was ich in meinem Controller habe.

$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(), 
    )); 

Der Ajax-Teil:

$(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); 
       } 

      }); 
     }); 
    }); 

ist es eine Möglichkeit, die Form ohne Umleitung oder die Seite aktualisieren

+0

Zuerst sagten Sie, dass Sie diesen Code taten, weil Sie ref nicht wünschen Ändern Sie die Seite jedes Mal und am Ende fragen Sie, ob es eine Möglichkeit gibt, die Seite zu aktualisieren ... was ist das? – Chris

+0

Oh, ich habe das nicht bemerkt, ich meinte eigentlich die erste, Einreichung ohne Aktualisierung –

Antwort

0

Es stellte sich heraus, Ihr Problem einfach war wirklich zu unterbreiten. Sie müssen nur den Datentyp hinzuzufügen, etwa so:

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

Ich möchte Ihnen zeigen, was ich normalerweise tun sieht

Meine PHP-Datei wie folgt aus:

$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)); 

Meine JS sieht aus wie diese:

$('.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

Danke für die Antwort Chris, was ich bekomme ist {"Nachricht": "Erfolg!"} Im Browser, stattdessen möchte ich bekommen Diese Nachricht in einer Alarmbox –

+0

Wenn data.message Ihnen {"message": "Success!"} gibt, bedeutet das, dass das Objekt tatsächlich so aussieht: {"message": {"message": "Success!"}} . Also, was Sie versuchen könnten, ist dies: data.message.message Können Sie mir bitte einen Gefallen tun und fügen Sie dies vor Ihrer Warnung und sagen Sie mir, was es in der Konsole ausgibt: console.log (Daten); – Chris

+0

Dies ist, was ich nach dem Klicken auf den Absenden-Button bekomme. [link] (http://prnt.sc/ajnm5k), habe ich auch data.message.message versucht, aber habe das gleiche Ergebnis. –