在symfony 3中使用ajax从控制器调用删除功能

时间:2017-04-04 11:23:33

标签: ajax symfony bootstrap-table

enter image description here我对symfony比较陌生。我有一个bootstrap tables的视图页面。我也创建了crud控制器(src \ AppBundle \ Controller \ SiftscienceTrackerController.php),删除功能如下:

public function deleteAction(Request $request, SiftscienceTracker $siftscienceTracker)
{
    $form = $this->createDeleteForm($siftscienceTracker);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($siftscienceTracker);
        $em->flush();
    }

    return $this->redirectToRoute('admin_siftsciencetracker_index');
}

我的问题是我是否可以通过表行中删除按钮的ajax调用来调用控制器的这个功能,以及如何编写ajax?如果没有,我可以在该控制器内创建另一个函数,并使用ajax调用吗?

1 个答案:

答案 0 :(得分:0)

以下是使用jQuery的示例:

public function deleteAction(Request $request, SiftscienceTracker $siftscienceTracker)
{
    $form = $this->createDeleteForm($siftscienceTracker);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($siftscienceTracker);
        $em->flush();
    }

    $request = $this->getRequest();

     if($request->isXmlHttpRequest() || $request->get('_xml_http_request')){
         return new JsonResponse("{url: $this->generateUrl('admin_siftsciencetracker_index')}", 200);
     }

    return $this->redirectToRoute('admin_siftsciencetracker_index');
}

如您所见,我检查请求是否是ajax请求,以避免单独执行操作。

由于您的操作返回重定向,您只需将URL作为json返回到进行ajax调用的脚本并在javascript中进行重定向:

$.ajax({
   url: $('#my-form').prop('action');
   method: 'post',
   data: $('#myForm').serializeArray() 
   success: function(response){
     window.location(response.url);
   }
});