Как отправить данные в php, используя POST, а затем получить данные из php, используя GET в чистом JavaScript? - PullRequest
0 голосов
/ 09 апреля 2019

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

Вот JS:

функция send ()

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");
    }       
}

функция recieve ()

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));
});

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

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

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

Вот PHP:

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

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

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

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

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

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

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

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

0 голосов
/ 09 апреля 2019

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

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

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

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

0 голосов
/ 09 апреля 2019

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

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

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

Вы должны хранить где-то $ 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";
  }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...