Как отправить данные на php с помощью POST, а затем получить данные с php с помощью GET в чистом javascript?

Я хочу отправить данные с помощью метода POST на php-сервер, а затем получить данные с сервера, используя на этот раз метод GET (я полагаю).

Вот JS:

функция отправки()

function send(leURL, laValeur) {
    try {
        return new Promise(function(resolve, reject) {
            var req = new XMLHttpRequest();
            req.open('POST', leURL);
            req.setRequestHeader("Content-Type", "application/json");
            req.onreadystatechange = function() {
                if (this.readyState == XMLHttpRequest.DONE && this.status == 200) {
                    document.getElementById("result").innerHTML = "Ok!";
                }
            };
            jmail = JSON.stringify(laValeur);
            req.send(jmail);
            resolve("true");                
        });
    }
    catch (err) {
        window.alert("erreur 2");
    }       
}

функция получения()

function recieve(laURL) {
    try {
        var reqt = new XMLHttpRequest();
        reqt.open('GET', laURL);
        reqt.onreadystatechange = function(e) {
            if (this.readyState == XMLHttpRequest.DONE && this.status = 200) {
                var rep = JSON.parse(this.responseText);
                try {
                    window.alert(rep);
                }
                catch (e) {
                    window.alert("erreur 4");
                }
            }
        }
        reqt.send();
        //return rep;   
    }
    catch (e) {
        window.alert("erreur 3");
    }
}

вызовы функций:

//there's a form in the HTML (id = "form")
document.getElementById("form").addEventListener('submit', function(evt) {
    evt.preventDefault();
    send(url, mail)
        .then(recieve(url));
});

Старая функция получения() (для целей тестирования):

function recieve(laURL) {
    window.alert(laURL);
}

Итак, пока я использовал старую функцию recive(), мне приходилось посылать(), выводя "Ok!" и получите(), создав предупреждение, что заставляет меня думать, что это сработало нормально. Но теперь, когда я использую новую функцию получения(), страница просто перезагружается. (Блок catch даже не отображается!)

Вот PHP:

<?php
if (!empty($_POST)) {
    $var = //do something with the data, involving $_POST
    echo $var;
}
else {
    echo "Hello, there !";
}
?>

Поскольку $var был сгенерирован из первого HTTP-запроса (POST), как мне получить его в javascript?

Я подозреваю, что ошибка вызвана либо php, либо из-за использования двух XMLHttpRequests (до сих пор я не знаю, как мне это сделать, используя только один HTTP-запрос)

Запрос POST уже возвращает значение (используя эхо). Все, что вам нужно, это показать это с помощью вашего JavaScript

ADyson 09.04.2019 11:21

например в запросе POST, if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { document.getElementById("result").innerHTML = this.responseText; } . Я не вижу необходимости в запросе GET, если только вы не собираетесь использовать его позже в своем процессе, ожидая, что данные могут измениться на сервере. Но чтобы это имело какой-то смысл, вы должны хранить данные где-то на сервере, а также отправлять в запросе некоторый идентификатор, сообщающий серверу, какую часть данных нужно получить.

ADyson 09.04.2019 11:27

Кажется, я не могу получить свою переменную javascript. $_POST пуст.

AniMir 09.04.2019 13:02

Прочтите это: stackoverflow.com/questions/18866571/receive-json-post-with-‌​php

ADyson 09.04.2019 13:03

В частности, этот ответ: stackoverflow.com/a/50900047/5947043 должен быть всем, что вам нужно.

ADyson 09.04.2019 13:04
Поведение ключевого слова "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) для оценки ваших знаний,...
0
5
850
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваш PHP сохраняет данные в переменной, выводит их, а затем завершает работу.

На этом PHP-программа завершается, память очищается, и переменная больше не существует.

Если вы хотите, чтобы данные были доступны для другого запроса, вы должны хранить их где-то настойчивый, например, в сеансе или базе данных.

Если вы хотите использовать один запрос, то прочитайте this.responseText в обработчике readyStateChange.

Что вы делаете со своими данными?

Как вы их храните?

Как вы восстанавливаете их на сервере, чтобы при необходимости отправить их клиенту?

Вы должны где-то хранить $var, обычно для этого мы используем сеанс $_SESSION. Все зависит от того, что вы хотите в конечном итоге.

Документация для сеанса PHP: https://www.php.net/manual/fr/reserved.variables.session.php

Как только вы начнете сеанс,

Я думаю, вы хотите сделать что-то вроде этого:

<?php
if ($_SESSION['var']) {
    echo "already done";
    ...
} else {
  if (!empty($_POST)) {
    $_SESSION['var'] = //do something with the data, involving $_POST
    echo $_SESSION['var'];
  } else {
    echo "var = not done, post = empty";
  }
}
?>
Ответ принят как подходящий

Запрос POST уже возвращает значение (используя эхо). Все, что вам нужно, это показать это с помощью вашего JavaScript.

например в POST-запросе:

if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { 
  document.getElementById("result").innerHTML = this.responseText; 
} 

Я не вижу необходимости в запросе GET, если только вы не собираетесь использовать его позже в своем процессе, ожидая, что данные могут измениться на сервере. Но чтобы это имело какой-то смысл, вы должны хранить данные где-то на сервере, а также отправлять в запросе некоторый идентификатор, сообщающий серверу, какую часть данных нужно получить.

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