如何使用post ajax发送数据并从symfony控制器获取数据

时间:2016-08-01 12:52:20

标签: ajax symfony

我正在尝试使用ajax脚本将数据发送到控制器中的方法:

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

但我似乎没有用,因为我有这个错误:

  

使用参数执行'INSERT INTO邀请(created_at,updated_at,text)VALUES(?,?,?)'时出现异常[“2016-08-01 17:12:55”,“2016-08-01 17:12:55“,null]:

     

SQLSTATE [23000]:完整性约束违规:1048 Le champ'text'nepeutêtrevide(null)!!!   因为文本为空,我没有得到它

2 个答案:

答案 0 :(得分:1)

我相信你在js方面传递了data错误。尝试将data更改为:

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

(您正在使用POST方法,在此方法中您不会在查询字符串中传递参数)

编辑:

您的控制器操作应如下所示:

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

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

答案 1 :(得分:0)

如文档here中所述,您可以尝试:

// 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');

希望这个帮助