2016-03-25 261 views
1

我是新來的都Symfony和阿賈克斯,我想提交表單,而無需刷新我是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(), 
    )); 

阿賈克斯部分:

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

感謝回答克里斯,就是我得到的是{「消息」:「成功」}在瀏覽器中,而不是我想該消息在警告框中 –

+0

如果data.message給你{「message」:「Success!」}它意味着該對象實際上看起來像這樣:{「message」:{「message」:「Success!」}} 。所以你可以嘗試的是這樣的:data.message.message 你可以請我幫忙,並在警報之前添加它,並告訴我它在控制檯輸出的內容:console.log(data); – Chris

+0

這是我點擊提交按鈕後得到的。 [鏈接](http://prnt.sc/ajnm5k),我也試過data.message.message,但得到了相同的結果。 –