Ajax 调用 Symfony 控制器
Posted
技术标签:
【中文标题】Ajax 调用 Symfony 控制器【英文标题】:Ajax to call Symfony controller 【发布时间】:2021-10-05 17:08:57 【问题描述】:我正在尝试使用 ajax 调用方法。 ajax连接成功,没有出现错误信息。
JS 代码
$("[id^=changeStatus]").each(function()
$(this).on("click", function()
const id = $(this).data('id');
console.log(id);
$.ajax(
type: "POST",
url: "url('change_order_status')",
data: id,
async: false,
)
.done(function()
console.log('success');
)
.fail(function ()
console.log('error');
);
);
但控制器中的方法似乎不起作用。 控制器
/**
* @Method("POST")
* @Route("/%eccube_admin_route%/", name="change_order_status")
* @param $request
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function changeOrderStatus(Request $request)
if (!$request->isXmlHttpRequest())
throw new BadRequestHttpException();
$this->logger->info("it's working");
dump($rquest);
我不知道它有什么问题。 请帮忙。
我将 js 插入到每个页面,因为 sn-p 这就是它无法正常工作的原因。
【问题讨论】:
你尝试过什么让它发挥作用?你被困在哪里了? 你能分享更多关于请求本身的细节吗?它是否发布到您希望使用的 URL 上?它是否包含应有的数据?您的网络标签告诉您有关请求的哪些信息? 【参考方案1】:您必须在控制器中返回 Response 类的实例。所以在这里,你可以做的是返回一个 JsonResponse
return new JsonResponse($request->getContent());
【讨论】:
可以在你的开发工具中添加ajax响应的截图吗? 当然。我添加了控制台的屏幕截图。谢谢你问我。【参考方案2】:也许你可以试试这个。
$("[id^=changeStatus]").each(function()
$(this).on("click", function()
const id = $(this).data('id');
console.log(id);
$.ajax(
type: "POST",
url: " path('change_order_status') ",
data:
id : id
,
async: false,
)
.done(function(data)
console.log(data)
console.log('success');
)
.fail(function ()
console.log('error');
);
);
/**
* @Route("/%eccube_admin_route%/", name="change_order_status", methods="POST")
* @param $request
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function changeOrderStatus(Request $request)
if (!$request->isXmlHttpRequest())
throw new BadRequestHttpException();
$this->logger->info("it's working");
$id = $request->request->get('id');
// Try to dump your request
// dd($request);
return $this->json([
'success' => true
]);
我只是不知道 eccube_admin_route 是什么意思。 并且不要忘记在控制器类中扩展 AbstractController
这是我项目中的示例。尝试转储您的控制器对象并使用 symfony 调试栏打开您的 ajax 请求,点击 url 列
【讨论】:
什么是“这个”?您能否为您的答案添加一些解释,以便其他人可以从中学习?你有什么改变,为什么? 非常感谢您的建议,但很抱歉它仍然不起作用。 “eccube_admin_route”是 EC 站点的配置页面。 Ajax 返回 eccube_admin_route 页面的 html 数据。不知道为什么不能调用该方法。 我将 js 插入到每个页面作为 sn-p 这就是为什么它不能正常工作? 我将“/%eccube_admin_route%/”更改为“/%eccube_admin_route%/order/ajax”,该函数看起来由 ajax 调用。谢谢你。但是,在$id = $request->query->get('id');
$id 会为空你能教我如何解决它吗?
你好,请尝试$id = $request->request->get('id');
,我忘了你在ajax方法上使用post。以上是关于Ajax 调用 Symfony 控制器的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 - KnpPaginator - AJAX/嵌入式控制器