使用Ajax调用Symfony控制器无响应,如何排查解决?
问题排查和修复方案
路由相关问题
- 你提到将JS作为代码片段插入所有页面,如果这段JS没有经过Twig模板渲染,
{{url('change_order_status')}}标签不会被替换为实际的接口地址,请求会发送到包含{{字符的非法路径,自然无法命中目标控制器。修复方式:要么将这段JS放到Twig模板文件中渲染,要么硬编码为实际的接口路径,可先在浏览器开发者工具的网络标签页确认请求的目标地址是否正确。 - 你的路由注解配置的路径是
/%eccube_admin_route%/也就是后台根路径,很容易和其他后台路由冲突,建议修改为/%eccube_admin_route%/change_order_status,避免路由匹配优先级问题导致请求走到其他控制器方法。
- 你提到将JS作为代码片段插入所有页面,如果这段JS没有经过Twig模板渲染,
AJAX请求配置问题
- 当前
data参数直接传入id值,POST请求需要传递键值对结构才能被后端正常解析,修改为:
data: { id: id },如果需要传递JSON格式,可额外补充
contentType: 'application/json'配置。
2. 控制器中判断了$request->isXmlHttpRequest(),这个校验依赖X-Requested-With请求头,部分场景下jQuery不会默认携带该头,建议手动补充到AJAX配置中:headers: { 'X-Requested-With': 'XMLHttpRequest' },- 当前
后端代码问题
- 控制器代码存在拼写错误:
dump($rquest);中的变量名少了字符e,正确应为$request,该错误会直接触发PHP运行时异常,导致请求报错。 - 你的方法声明要求返回
JsonResponse类型,当前逻辑没有任何返回值,就算请求正常进入方法也会抛出响应异常,建议调试完成后补充返回逻辑,例如:
return new JsonResponse(['status' => 'success', 'id' => $request->get('id')]);- 控制器代码存在拼写错误:
调试建议
触发请求后先查看浏览器网络标签页的请求地址、状态码、返回内容,可快速定位问题所在层级。
内容的提问来源于stack exchange,提问作者jnpps
相关产品推荐
相关产品推荐

