Symfony 5 / 请求响应:使用 Ajax 获取数据

Posted

技术标签:

【中文标题】Symfony 5 / 请求响应:使用 Ajax 获取数据【英文标题】:Symfony 5 / Request Response : Get data with Ajax 【发布时间】:2021-09-04 09:40:47 【问题描述】:

当我尝试在 ajax 中获取数据时,返回的对象是空的

我在js中发送我想要获取的数据的id:

    function selectMessage(id) 
         
        $.ajax(
                url: ' path('back_translation_update') ',
                method: 'GET',
                data: id: id
        ).done(function (response) 
            console.log(response)
        )
         
    
     
    $('.updateMessage').click(function (evt) 
        evt.stopPropagation()
        selectMessage($(this).data('id'))
    )

在控制器中我寻找要返回的数据:

    /**
     * @Route("/update", name="back_translation_update", methods="GET|POST")
     */
    public function getById(Request $request): Response
    
        if ($request->isXMLHttpRequest()) 
             
            $id = $request->get('id');
//            dd($id);
             
            $message = $this->translationService->getTranslationById($id);
             
//            return new JsonResponse(['data' => $message]);
 
            $response = new Response();
            $response->setContent(json_encode([
                'data' => $message,
            ]));
            $response->headers->set('Content-Type', 'application/json');
            return $response;
        
                 
    

我使用服务是因为存储库出现错误:getById () must be an instance of Symfony\Component\HttpFoundation\Response

与:

$repositoryMessage = $this->em->getRepository(TranslationMessage::class); 
$message = $repositoryMessage->findOneBy(['id' => $id]);

所以服务将在数据库中查找:

public function getTranslationById($translation_id)

    $query = $this->em->createQueryBuilder()
        ->from(TranslationMessage::class,'message')
        ->select('message')
        ->where('message.id = ?1')
        ->setParameter(1, $translation_id);
     
    $message = $query->getQuery()->getResult();
//    dd($message);
    return $message;

所有 dd() 都给出预期值:

进入 getById():寻找的行的 id

进入 getTranslationById():寻找的对象

但在 XHR 中,data 包含一个空对象:uh:

与新的 JsonResponse 相同,在此处评论

我错过了什么?帮助

【问题讨论】:

【参考方案1】:

使用Aurowire获取messageRepository对象,使用$this->json()返回JsonResponse

/**
* @Route("/update", name="back_translation_update", methods="GET|POST")
*/
public function getById(Request $request, TranslationMessageRepository $messageRepository): JsonResponse
        
    $id = $request->query->get('id');
    $message = $messageRepository->find($id);

    if(!$message)  return new NotFoundHttpException(); 

    return $this->json([
         'success' => true,
         'data' => $message
    ]);
                 

定义成功函数而不是完成函数

function selectMessage(id) 
        $.ajax(
                url: " path('back_translation_update') ",
                method: 'GET',
                data:  id: id 
                success: function(data) 
                    console.log(data)
                

        )
         

【讨论】:

太好了,我明白了!我只需要调整 url 路径以从 js 文件中获取它,因为有 locale 参数,所以再次感谢一个

以上是关于Symfony 5 / 请求响应:使用 Ajax 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Symfony / Ajax:成功响应时调用函数

使用 AJAX XMLHttpRequest 时,Symfony StreamedResponse 的响应文本被连接起来

如何在 Symfony 2.0 AJAX 应用程序中将 Doctrine 实体编码为 JSON?

如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

Symfony 安全返回 401 响应而不是重定向

5.Ajax