繁体   English   中英

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

[英]How to send data to php using POST and then retrieve data from php using GET in pure javascript?

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

函数receve()

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

旧的receve()函数(用于测试):

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

因此,只要我使用旧的recieve()函数,我的send()都将打印“ Ok!”。 和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请求来执行此操作)

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

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

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

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

您如何处理数据?

您如何存储它们?

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

您应该将$ 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请求已经返回值(使用echo)。 您所需要做的就是使用JavaScript展示它。

例如在POST请求中:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM