如何使用POST将数据发送到php,然后使用纯JavaScript中的GET从php检索数据?

时间:2019-04-09 09:19:21

标签: javascript php ajax

这次,我想使用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");
    }       
}

function 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()打印“好!”和receve()创建一个警报,这使我认为它工作正常。但是,既然我使用了新的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引起的,还是由使用两个XMLHttpRequests引起的(仍然不知道如何仅使用一个HTTP请求来做到这一点)

3 个答案:

答案 0 :(得分:1)

您的PHP将数据存储在变量中,将其回显,然后退出。

此时,PHP程序已完成,内存已清理,并且变量不再存在。

如果您希望数据可用于其他请求,则必须将其存储在持久的某个位置,例如会话或数据库。

如果要使用单个请求,请在this.responseText处理程序中阅读readyStateChange

答案 1 :(得分:0)

您如何处理数据?

您如何存储它们?

如果需要,您如何在服务器上检索它们,然后将它们发送给客户端?

您应该将$ 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";
  }
}
?>

答案 2 :(得分:0)

POST请求已经返回值(使用echo)。您所需要做的就是使用JavaScript展示它。

例如在POST请求中:

 constraint stafUnique EXCLUDE ( (org,post) with in) where (staff = true) 

我认为不需要GET请求,除非您打算稍后在流程中使用它,因为期望服务器上的数据可能已更改。但是,从某种意义上讲,您必须将数据存储在服务器上的某个位置,并且还向请求中发送一些标识符,以告知服务器要检索哪些数据。