如何在symfony3中的ajax调用上返回json响应?

时间:2016-04-05 11:29:44

标签: symfony

我正在使用symfony3:

我通过ajax调用调用方法:

控制器

/**
     * @Route("personnel/domainlist/{id}", name="ajax_method")
     * @Method("GET")
     */
    public function domainlist(Request $request,$id){
       $repository = $this->getDoctrine()->getRepository('AppBundle:ENTITYNAME');          
       $res=$repository->findBy(array('COLNAME' => $id));          
      // create a JSON-response with a 200 status code

      $response = new Response(json_encode($res));    
      $response->headers->set('Content-Type', 'application/json');
      return $response;
      die;
    }

以上代码形式我得到以下结果:  的print_r($ RES);

Array
(
    [0] => AppBundle\Entity\ENTITYNAME Object
        (
            [domain_id:AppBundle\Entity\ENTITYNAME:private] => 15
            [domain_title:protected] => ABC
            [domain_group_id:protected] => 1
        )
)

AJax代码:

 $.ajax({
        url: "domainlist/" + pdoamin_id,      
        type: 'POST',
        dataType: 'json',        
         success: function(result) {
            alert(result);
             }
          });

  });

任何人都可以帮助我如何在symfony3中将json返回给ajax方法

3 个答案:

答案 0 :(得分:1)

在将其推送到Response之前,您必须序列化您的答案。 有两种方法可以做到(至少我只知道两种方式)

  1. The Serializer Component
  2. Implement interface \JsonSerializable(PHP版本> = 5.4)
  3. 在两种变体中,您的json_encode函数都可以正常工作。

    我更喜欢第二种方式,因为它的简单性

答案 1 :(得分:0)

$repository = $this->getDoctrine()->getRepository('AppBundle:ENTITYNAME');          
       $res=$repository->findBy(array('COL_NAME' => $id));          
       $normalizer = new ObjectNormalizer();      
       $encoder = new JsonEncoder();
       $serializer = new Serializer(array($normalizer), array($encoder));
       $response=$serializer->serialize($res, 'json'); 

答案 2 :(得分:0)

不确定Symfony 3是否具有该类,但是在Symfony 4中,可以使用JsonResponse类。

将类导入您的控制器

use Symfony\Component\HttpFoundation\JsonResponse;

然后在您的return语句中使用其构造函数之一:

return new JsonResponse($dataToReturn);

对我有用。