2016-03-25 11 views
1

私はsymfonyとajaxの両方に新しいので、私はthisチュートリアルに従うたびにページをリフレッシュせずにフォームを送信したいと思います。このメッセージをブラウザで取得するJsonレスポンスが表示されます

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

Ajaxの一部:

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

最初に、このコードを実行したと言いました毎回ページを再作成し、ページを更新する方法があるかどうかを尋ねます。これはどちらですか? – Chris

+0

ああ、私は気づかなかった、私は実際に最初のことを意味し、爽やかでなく提出した。 –

答えて

0

はあなたの問題は本当に簡単だったが判明ページをリダイレクトするか、更新せずにフォームを送信するためにどのような方法があります。あなたはそうのようなデータ型を追加する必要があります。

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

私の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

Chrisに返信してくれてありがとう、私が得ているものはブラウザで{"メッセージ": "成功!"}そのメッセージは警告ボックスに表示されます –

+0

data.messageがあなたに{"message": "Success!"}を与えている場合は、オブジェクトが実際に{{message}:{"message": "Success! 。だからあなたが試みることができるのはこれです:data.message.message あなたは私に好意を持ってアラートの前にこれを追加して、コンソールに出力されたものを教えてください:console.log(data); – Chris

+0

これは、送信ボタンをクリックした後に表示されます。 [link](http://prnt.sc/ajnm5k)、私もdata.message.messageを試しましたが、同じ結果を得ました。 –

関連する問題