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 获取数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 AJAX XMLHttpRequest 时,Symfony StreamedResponse 的响应文本被连接起来
如何在 Symfony 2.0 AJAX 应用程序中将 Doctrine 实体编码为 JSON?