【问题标题】:how to send data using post ajax and get it from a symfony controller如何使用 post ajax 发送数据并从 symfony 控制器获取数据
【发布时间】:2016-08-01 23:57:06
【问题描述】:

您好,我正在尝试使用 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')); 
}

但我似乎不工作,因为我有这个错误:

使用参数 ["2016-08-01 17:12:55", "2016-08-01 17:12:55",空]:

SQLSTATE[23000]:违反完整性约束:1048 Le champ 'text' ne peut être vide (null) !!! 因为 text 是 null ,我不明白

【问题讨论】:

标签: ajax symfony


【解决方案1】:

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

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

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

编辑:

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

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

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

【讨论】:

  • 使用这个建议时会遇到一个问题:Uncaught SyntaxError: Unexpected identifier
  • 您需要向我们提供更多详细信息 究竟是什么错误?粘贴整个错误信息
  • 检查我的编辑。如果将有效请求发送到服务器,您是否检查了 firebug 或其他工具?
  • 想想你,但看看这个:控制器“Invitation\InvitationBundle\Controller\InvitationController::enregistrerInvAction()”要求您为“$request”参数提供一个值(因为没有默认值值或因为在此参数之后有一个非可选参数)。我尝试了: public function enregistrerInvAction(Request $request) 并且我的控制器在使用 :var_dump($_POST) 后给出了这个,array (size=0) empty 这意味着我没有收到任何数据!!!
  • 你需要输入提示 $request 参数,我已经更新了答案以反映这一点
【解决方案2】:

如文档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');

希望有帮助

【讨论】:

  • 嗨,我试过你的建议,但它不起作用:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 2016-03-29
  • 2014-12-06
  • 2013-07-28
  • 2016-06-30
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多