Исключение «Отказано в доступе» при отправке формы AJAXPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Исключение «Отказано в доступе» при отправке формы AJAX

Сообщение Anonymous »

Я пытаюсь реализовать дополнительную подписку на информационный бюллетень в магазине Shopware Storefront, где пользователи могут подписаться на вторичную рассылку новостей или отказаться от нее. Для реализации этой функции я создал или изменил следующие файлы:
  • newsletter.html.twig: расширяет базовый шаблон информационного бюллетеня и добавляет новую форму флажка.
  • handleAdditionalOptionSubmission() в контроллере: обрабатывает отправку формы через запрос POST к маршруту frontend.account.additionalOption.
  • index.js: добавляет прослушиватель событий в форму и выполняет запрос AJAX.
Когда я устанавливаю флажок и отправляю форму, я получаю исключение AccessDeniedHttpException с сообщением «PageController может не запрашивается через XmlHttpRequest."
Вот соответствующий код:
newsletter.html.twig

Код: Выделить всё

{% sw_extends '@Storefront/storefront/page/account/newsletter.html.twig' %}
{% block page_account_overview_newsletter_content_form %}
{{ parent() }}

{# ... form content ... #}

{% endblock %}
функция в контроллере

Код: Выделить всё

#[Route(path: '/account/newsletter/additional-option', name: 'frontend.account.additionalOption', methods: ['POST'], defaults: ['_loginRequired' => true, '_storefront' => true])]
public function handleAdditionalOptionSubmission(Request $request, RequestDataBag $dataBag, SalesChannelContext $context, CustomerEntity $customer): Response {
// ... controller logic ...
}
index.js

Код: Выделить всё

document.querySelectorAll('form[name="additionalOptionForm"]').forEach(form => {
form.addEventListener('submit', this.additionalOptionFormSubmit.bind(this));
});

additionalOptionFormSubmit(e) {
e.preventDefault();
var form = e.target;
var data = new FormData(form);
data.append('additionalOption', document.querySelector('#newsletterAdditionalOption').checked ? 'agreed' : 'not-asked');
data.append('csrf_token', document.querySelector('meta[name="csrf-token"]').getAttribute('content'));
this._client.post(form.getAttribute('action'), data, (response) => {
this.handleFormResponse(response);
});
return false;
}
Где я ошибаюсь и как исправить проблему AccessDeniedHttpException при отправке формы через AJAX?


Подробнее здесь: https://stackoverflow.com/questions/792 ... -ajax-form
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»