Не удается получить данные публикации из Javascript в PHP

это мой первый пост, я застрял на этом, помогите пожалуйста.

На странице у меня есть две формы 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;
    }

Меня перенаправляют на страницу, но ответ - «нет данных». Спасибо заранее за вашу помощь.

Определены ли produits и contrat?

Félix Paradis 05.09.2018 14:17

Да @FelDev, вот тут data: { 'produits' : produits, 'contrat' : contrat }

Jay Blanchard 05.09.2018 14:18

Да, я создал console.info непосредственно перед функцией .click (), чтобы убедиться, что они определены, прежде чем помещать их в функцию ajax.

Halim Entation 05.09.2018 14:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
413
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку перенаправление приводит к потере данных POST., Запрос AJAX ожидает возврата информации через AJAX. Добавьте запрет по умолчанию, чтобы остановить перенаправление:

$("#btn_final").click(function( e ) {
    e.preventDefault();

Затем обратите внимание на запрос AJAX в инструментах разработчика. Если $('#btn_final') - это кнопка отправки, вам нужно будет использовать обработчик .submit().

Если вы планируете выполнить перенаправление на PHP-скрипт, обрабатывающий данные, нет никакой необходимости в jQuery или AJAX вообще.

Привет, спасибо за быстрый ответ. Это не была кнопка отправки (я думал, что это нормально), поэтому я написал функцию «.click ()». Я пробовал использовать кнопку отправки и написал функцию ".submit ()", но теперь при нажатии на кнопку она ничего не делает. Я также поместил строку «e.preventDefault ()»

Halim Entation 05.09.2018 14:25

ОК - тогда вы можете просто использовать кнопку, не нужно отправлять. Где вы устанавливаете переменные поста?

Jay Blanchard 05.09.2018 14:27

Проблема заключается в перенаправлении внутри успешного обратного вызова. @HalimEntation Сначала вы делаете запрос Ajax к URL-адресу с параметрами POST, затем отбрасываете результат и перенаправляете на тот же URL-адрес, который создает новый запрос GET без каких-либо параметров. То, что вы видите в браузере, является результатом этого второго запроса.

JJJ 05.09.2018 14:29

Мой массив contrat определен перед функцией ".submit ()" первой формы, а мой массив "produits" определен перед функцией ".submit ()" второй формы. Во время двух функций ".submit ()" я просто помещаю данные в массивы, а после двух функций submit () заполняю два массива.

Halim Entation 05.09.2018 14:32

Хорошо @JJJ Я думаю, что понял, но как мне перенаправить после публикации данных? Я не должен перенаправлять в обратном вызове успеха?

Halim Entation 05.09.2018 14:34

Вы может перенаправляете в обратном вызове, но не ожидаете увидеть свои данные публикации, если вы не передадите эти данные в какое-то хранилище, которое вы можете запросить. В большинстве случаев вам вообще не следует использовать AJAX, если вы планируете перенаправить.

Jay Blanchard 05.09.2018 14:36

Я вообще не вижу смысла делать Ajax-запрос, если вы все равно хотите немедленно перенаправить туда. Просто попросите HTML-форму отправить туда данные в обычном режиме, и она сразу заработает.

JJJ 05.09.2018 14:36

Хорошо, спасибо @@@ JayBlanchard и @JJJ, поэтому я не должен использовать для этого Ajax. Я сделал это, потому что продукты динамически хранятся в таблице данных, но пользователь может удалить некоторые продукты (строки), поэтому, прежде чем я нажму кнопку окончательной отправки, я еще не знаю, что это за данные. Последняя кнопка должна получить окончательные данные, передать их контроллеру и перенаправить на следующую страницу.

Halim Entation 05.09.2018 14:43
Ответ принят как подходящий

Мне удалось сделать это одной простой строкой благодаря плагину 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});

и это работает.

Другие вопросы по теме