バージョン選択

フォーラム

メニュー

オンライン状況

21 人のユーザが現在オンラインです。 (10 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 21
もっと...

サイト内検索

プラグイン > 開発について > Ajaxでコントローラーを呼び出せない

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hashida
投稿日時: 2021/7/30 18:46
対応状況: 開発中
半人前
登録日: 2021/6/25
居住地:
投稿: 18
Ajaxでコントローラーを呼び出せない
Ajaxでコントローラー内の関数を呼び出そうとしているのですが、稼働しません。
エラーメッセージなどは出ておらず、ajax接続も成功しています。
何が原因かわからずお手上げ状態です。
どなたかご教授いただけますと幸いです。

コントローラー

<?php

namespace Plugin\PushNotifyOrder\Controller\Admin;

use Eccube\Controller\AbstractController;
use Eccube\Repository\OrderRepository;
use Eccube\Entity\ItemHolderInterface;
use Eccube\Entity\Master\OrderStatus;
use Eccube\Entity\Order;
use Eccube\Repository\Master\OrderStatusRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Psr\Log\LoggerInterface;

class NewOrderStatusController extends AbstractController
{
    /**
     * @var OrderStatusRepository
     */
    private $orderStatusRepository;

    /**
     * @var OrderRepository
     */
    private $orderRepository;

    private $logger;


    /**
     * NewOrderStatusController constructor.
     *
     * @param OrderStatusRepository $orderStatusRepository
     * @param OrderRepository $orderRepository
     */
    public function __construct(OrderStatusRepository $orderStatusRepository,OrderRepository $orderRepository, LoggerInterface $logger)
    {
        $this->orderStatusRepository = $orderStatusRepository;
        $this->orderRepository = $orderRepository;
        $this->logger = $logger;
    }

    /**
     * @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->query->get('id');


        $Order = $this->orderRepository->find($id);
        $OrderStatus = $this->orderStatusRepository->find(OrderStatus::IN_PROGRESS);
        $Order->setOrderStatus($OrderStatus);
        $Order->setOrderDate(new \DateTime());

        $em = $this->getEntityManager();
        $em->persist($Order);
        $em->flush();
    
        return $this->json([
            'success' => true
        ]);
    }
}


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 : id
              },
              async: false,
      })
      .done(function(data){
        console.log(data)
        console.log('success');
      })
      .fail(function () {
        console.log('error');
      });
    });
  });


ajaxの戻り値は管理画面(/%eccube_admin_route%/)のhtml情報が返ってきます。
468
投稿日時: 2021/7/31 15:25
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3078
Re: Ajaxでコントローラーを呼び出せない
ルーティングの定義で指定されているURL「/%eccube_admin_route%/」が
管理画面ホーム「AdminController.php function index()」のルーティングと被っているのが原因ではないでしょうか?

管理画面ホームの@Routeアノテーションではmethodsを指定していないので
POST通信にも反応するのではないかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

hashida
投稿日時: 2021/8/2 12:04
対応状況: 開発中
半人前
登録日: 2021/6/25
居住地:
投稿: 18
Re: Ajaxでコントローラーを呼び出せない
ご回答ありがとうございます。
勉強不足で申し訳ございません。
ルーティングのアドレスを変更すればよいのでしょうか。

呼び出し側のJSはaddSnippetで全管理画面に表示するようにしております。

何卒宜しくお願い致します。

468
投稿日時: 2021/8/2 18:13
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3078
Re: Ajaxでコントローラーを呼び出せない
"/%eccube_admin_route%/"
の部分が他のルーティングと被らなければ良いので、極端な話
"/%eccube_admin_route%/aaaa"
でも問題無いと思います。

どういったURLパスにするかはhashidaさんで自由に決めれば良いと思います。

js側はルーティングのnameで指定すればよいので今のままでいいと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

hashida
投稿日時: 2021/8/4 13:09
対応状況: −−−
半人前
登録日: 2021/6/25
居住地:
投稿: 18
Re: Ajaxでコントローラーを呼び出せない
ありがとうございます。
おかげさまで、うまくいきました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,078名です
総投稿数は102,130件です

投稿数ランキング

1
seasoft
7333
2
468
3078
3
AMUAMU
2712
4
nanasess
2180
5
umebius
2030
6
yuh
1612
7
red
1453
8
h_tanaka
1090
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.