我们可以使用Symfony2处理表单而不会在最后重定向到另一个URL吗?

时间:2015-11-17 15:45:27

标签: php ajax symfony

我在使用Ajax处理两个表中的表单上的数据时遇到问题,因为没有更新屏幕。 Sumfony2重定向到最后将数据处理到url,如下面的代码所示:

public function createAction(Request $request)
 {
    $entity = new Users();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

       if ($form->isValid()) {

        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();


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

    return $this->render('BackendBundle:Userss:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}

ajax电话:

$('.form_student').submit(function(event) {
event.preventDefault();

$.ajax({
type: 'POST',
url: Routing.generate('student_create'),
data: $(this).serialize(),

success: function(response) {

 alert(response.result);

  },
 error: function (xhr, desc, err){

 alert("error");
}
})
return false;
});

有没有办法不将它转发到任何URL,并且可以使用Ajax在该窗口中加载任何内容?

2 个答案:

答案 0 :(得分:1)

替换

return $this->redirect($this->generateUrl('users_new'));

通过

return new JsonResponse($this->generateUrl('users_new'));

这将返回url而不是重定向到它,然后您可以使用javascript加载它。

答案 1 :(得分:1)

如果是使用isXmlHttpRequest方法的ajax调用,您可以检查$ request。

所以你可以这样做:

use Symfony\Component\HttpFoundation\JsonResponse;
....
if ($form->isValid()) {

    // do something
    if ($request->isXmlHttpRequest()) {
            // generate a response for tour client, as example:
            return new JsonResponse(array("result" => 1);
        }

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

希望这个帮助