2016-08-01 71 views
0

IM嗨得到它想要的数据DEND我在控制器方法使用AJAX脚本:如何使用后Ajax来发送数据和从symfony的控制器

$("#form_enr").submit(function(ev) { 
    ev.preventDefault(); 

    var ev = $("#mySelect").val(); 
    var text =$("#form_Text").val(); 

    console.log(text); 
    console.log(ev); 

    $.ajax({ 
     type: "POST", 
     url: "{{ path('invitation_enregistrerInv')}}", 
     data : 'ev=' + ev + '&text=' + text, 
     success: function(data){ 
      $('.portlet-body').html(data);   
     } 
    });  

}); 

,并得到它,我用这个语法:

public function enregistrerInvAction() 
{ 
    $inv = new Invitation();  
    $em = $this->getDoctrine()->getManager(); 
    $request = $this->get('request'); 

    $ev = $request->request->get('ev'); 
    $text = $request->request->get('text'); 

    $inv->setCreatedAt(new \Datetime()); 
    $inv->setUpdatedAt(new \Datetime()); 
    $inv->setText($text); 

    $em->persist($inv); 
    $evenement=$em->getRepository('EvEvenementBundle:Evenement')->findById($ev); 
    $evenement=new Evenement(); 
    $evenement->setInvitation($inv); 
    $em->persist($evenement); 
    $em->flush(); 
    $this->addFlash(
     'success', 
     'Les informations ont été enregistrées!' 
    ); 

    return $this->redirect($this->generateUrl('invitation_index2')); 
} 

,但我似乎没有工作,因为我有这样的错误:

An exception occurred while executing 'INSERT INTO invitation (created_at, updated_at, text) VALUES (?, ?, ?)' with params ["2016-08-01 17:12:55", "2016-08-01 17:12:55", null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'text' ne peut être vide (null) !!! because text is null , and I don't get it

+0

请使用['Request' injection](http://symfony.com/doc/current/controller.html#the-request-object-as-a-controller-argument)在你的控制器中,容器中的''request''已被弃用['request_stack'] [http://symfony.com/blog/new-in-symfony-2-4-the-request -stack) – NDM

+0

我试过不仅你的建议,但许多其他人,它似乎是一个严重的问题 –

回答

0

如DOC 0123描述,你可以尝试:代替

// Better use the request passed on the controller's method signature 
$request = $this->get('request'); 

$ev = $request->request->get('ev'); 
$text = $request->request->get('text'); 

$request = $this->get('request'); 

$ev = $request->get('ev'); 
$text = $request->get('text'); 

希望这有助于

+0

嗨,我试过你的建议,但它不工作:( –

1

我相信你通过data错在JS的一面。尝试改变data这样的:

$.ajax({ 
    (...) 
    data : { 
     ev: ev, 
     text: text 
    } 
});  

(你正在使用POST方法,你不通过查询字符串参数在此方法)

编辑:

你的控制器动作应该像:

public function enregistrerInvAction(Request $request){ 
    (...) 
    $text = $request->request->get('text'); 
    (...) 
} 

您确定有效数据来自请求吗? (你可以尝试做var_dump($_POST)

+0

嗨我试过你的建议,但它不工作! –

+0

和这里是使用此建议时的一个问题:未捕获SyntaxError:意外的标识符 –

+0

您需要给我们更多的细节什么是错误?粘贴整个错误信息 –