我想使用 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));
});
旧的 receive() 函数(用于测试目的):
function recieve(laURL) {
window.alert(laURL);
}
所以,只要我使用旧的 receive() 函数,我就可以 send() 打印“Ok!”并 receive() 创建一个警报,这让我认为它工作得很好。但现在我使用新的 receive() 函数,页面就会重新加载。 (甚至没有显示 catch block !)
这是 PHP :
<?php
if (!empty($_POST)) {
$var = //do something with the data, involving $_POST
echo $var;
}
else {
echo "Hello, there !";
}
?>
由于 $var 是根据第一个 HTTP 请求 (POST) 生成的,因此如何在 JavaScript 中检索它?
我怀疑该错误是由 php 引起的,或者是由于使用两个 XMLHttpRequest 引起的(我仍然不知道应该如何仅使用一个 HTTP 请求来执行此操作)
最佳答案
您的 PHP 将数据存储在变量中,回显它,然后退出。
至此,PHP程序结束,内存被清理,变量不再存在。
如果您希望数据可供其他请求使用,则必须将其存储在持久的位置,例如 session 或数据库。
如果您想使用单个请求,请在 readyStateChange
处理程序中读取 this.responseText
。
关于javascript - 如何使用 POST 将数据发送到 php,然后使用纯 javascript 中的 GET 从 php 检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55589269/