【问题标题】:Ajax to call Symfony controllerAjax 调用 Symfony 控制器
【发布时间】: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 上?它是否包含应有的数据?您的网络标签告诉您有关请求的哪些信息?

标签: ajax symfony


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多