Я хочу отправить данные с помощью метода 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, if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { document.getElementById("result").innerHTML = this.responseText; } . Я не вижу необходимости в запросе GET, если только вы не собираетесь использовать его позже в своем процессе, ожидая, что данные могут измениться на сервере. Но чтобы это имело какой-то смысл, вы должны хранить данные где-то на сервере, а также отправлять в запросе некоторый идентификатор, сообщающий серверу, какую часть данных нужно получить.
Кажется, я не могу получить свою переменную javascript. $_POST пуст.
Прочтите это: stackoverflow.com/questions/18866571/receive-json-post-with-php
В частности, этот ответ: stackoverflow.com/a/50900047/5947043 должен быть всем, что вам нужно.



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


Ваш 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, если только вы не собираетесь использовать его позже в своем процессе, ожидая, что данные могут измениться на сервере. Но чтобы это имело какой-то смысл, вы должны хранить данные где-то на сервере, а также отправлять в запросе некоторый идентификатор, сообщающий серверу, какую часть данных нужно получить.
Запрос POST уже возвращает значение (используя эхо). Все, что вам нужно, это показать это с помощью вашего JavaScript