это мой первый пост, я застрял на этом, помогите пожалуйста.
На странице у меня есть две формы Symfony (без классов), из которых я получаю данные, которые храню в массивах. Первая форма предназначена для контракта, а другая форма используется для заполнения таблицы данных продуктов их данными (цена, количество и т. д.). В каждой из этих форм у меня есть кнопка отправки, которой я управляю с помощью ajax (onclick), чтобы перейти на шаг вперед по странице, предотвращая обработку данных. Таблица данных, в которой перечислены продукты, является конечным шагом страницы, и под ней у меня есть кнопка проверки, которую я хочу использовать для отправки всех данных из 1-й формы и таблицы данных (в которой находятся данные из второй формы), которые я ранее хранились в массивах.
Я знаю два способа сделать это ($ .post с jQuery и другой с ajax, но оба не работают). Мне удается перенаправить на другую страницу, но я не могу получить данные $ _POST (или $ request).
Вот часть ajax "последней кнопки" (с другим способом, который я пробовал в комментариях):
$("#btn_final").click(function( e ) {
// console.info(produits);
// $.post(
// path_confirm,
// { produits: produits },
// function() {
// window.location.replace(path_confirm);
// }
// );
$.ajax({
url: path_confirm,
type: 'POST',
// dataType: 'html',
data: { 'produits' : produits, 'contrat' : contrat },
// context: this,
// dataType: "json",
success:function(data) {
window.location.replace(path_confirm);
// console.info(data);
},
error:function(data) {
alert("erreur");
}
});
и вот мой базовый контроллер якобы получает данные:
public function getData(Request $request) {
// $produits = $request->request->get('produits');
// $contrat = $request->request->get('contrat');
if ($_POST) {
var_dump($_POST);die;
} else {
echo "<h1> no data :/ </h1>";die;
}
Меня перенаправляют на страницу, но ответ - «нет данных». Спасибо заранее за вашу помощь.
Да @FelDev, вот тут data: { 'produits' : produits, 'contrat' : contrat }
Да, я создал console.info непосредственно перед функцией .click (), чтобы убедиться, что они определены, прежде чем помещать их в функцию ajax.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку перенаправление приводит к потере данных POST., Запрос AJAX ожидает возврата информации через AJAX. Добавьте запрет по умолчанию, чтобы остановить перенаправление:
$("#btn_final").click(function( e ) {
e.preventDefault();
Затем обратите внимание на запрос AJAX в инструментах разработчика. Если $('#btn_final') - это кнопка отправки, вам нужно будет использовать обработчик .submit().
Если вы планируете выполнить перенаправление на PHP-скрипт, обрабатывающий данные, нет никакой необходимости в jQuery или AJAX вообще.
Привет, спасибо за быстрый ответ. Это не была кнопка отправки (я думал, что это нормально), поэтому я написал функцию «.click ()». Я пробовал использовать кнопку отправки и написал функцию ".submit ()", но теперь при нажатии на кнопку она ничего не делает. Я также поместил строку «e.preventDefault ()»
ОК - тогда вы можете просто использовать кнопку, не нужно отправлять. Где вы устанавливаете переменные поста?
Проблема заключается в перенаправлении внутри успешного обратного вызова. @HalimEntation Сначала вы делаете запрос Ajax к URL-адресу с параметрами POST, затем отбрасываете результат и перенаправляете на тот же URL-адрес, который создает новый запрос GET без каких-либо параметров. То, что вы видите в браузере, является результатом этого второго запроса.
Мой массив contrat определен перед функцией ".submit ()" первой формы, а мой массив "produits" определен перед функцией ".submit ()" второй формы. Во время двух функций ".submit ()" я просто помещаю данные в массивы, а после двух функций submit () заполняю два массива.
Хорошо @JJJ Я думаю, что понял, но как мне перенаправить после публикации данных? Я не должен перенаправлять в обратном вызове успеха?
Вы может перенаправляете в обратном вызове, но не ожидаете увидеть свои данные публикации, если вы не передадите эти данные в какое-то хранилище, которое вы можете запросить. В большинстве случаев вам вообще не следует использовать AJAX, если вы планируете перенаправить.
Я вообще не вижу смысла делать Ajax-запрос, если вы все равно хотите немедленно перенаправить туда. Просто попросите HTML-форму отправить туда данные в обычном режиме, и она сразу заработает.
Хорошо, спасибо @@@ JayBlanchard и @JJJ, поэтому я не должен использовать для этого Ajax. Я сделал это, потому что продукты динамически хранятся в таблице данных, но пользователь может удалить некоторые продукты (строки), поэтому, прежде чем я нажму кнопку окончательной отправки, я еще не знаю, что это за данные. Последняя кнопка должна получить окончательные данные, передать их контроллеру и перенаправить на следующую страницу.
Мне удалось сделать это одной простой строкой благодаря плагину jQuery под названием «перенаправление». Если это поможет кому-то позже:
Вам нужно просто импортировать скрипт отсюда в ваше представление: https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Тогда просто напишите:
$.redirect(url, [values, [method, [target, [traditional, [redirectTop]]]]])
В моем случае я написал:
$.redirect(path_confirm, {'produits': produits, 'contrat': contrat, 'pj': pj, 'idclient': id});
и это работает.
Определены ли
produitsиcontrat?