我试图在Javascript中发送一个字符串到我的服务器上,我让它创建了一个cookie,现在我想让它做一些事情(现在:简单的回音)。我让它创建了一个cookie,现在我想让它做一些事情(现在:一个简单的回声)。这是我的按钮功能(我使用Bokeh)。
const d = s.data;
var clustOut = "Nevermind the real input";
if (numberOfColors.length >= 2) {
localStorage.setItem("input", clustOut);
document.cookie = ('clustOut=' + clustOut + ';max-age=10368000;' + ';path=/');
window.location.href = "/php-scripts/post_cluster.php";
//alert(numberOfColors.length + "\\n" + clustOut);
//alert(d["x"] + d["y"] + d["color"]);
} else {
alert ("You have to assign the points to at least two clusters!");
}
我的PHP文件应该是简单的回声。
<?php
$clustOut = $_COOKIE['clustOut'];
echo $clustOut;
?>
我很确定 window.location.href = "/php-scripts/post_cluster.php";
可能是错误的提交命令。我怎样才能使我的PHP脚本得到我刚刚设置的Cookie?
客户端和服务器可以通过HTTP协议相互通信。每当你加载一个网页时,一个HTTP请求就会被发送到服务器,并将响应发送回客户端。你可以通过相同的协议,用下面的方法发出自己的请求并与服务器对话 获取API.
你把数据发送给服务器,然后等待响应回来。这样你就可以检查服务器收到了什么,也许可以用你得到的响应做一些事情。
let data = {
clustOut: "Nevermind the real input"
};
fetch('/php-scripts/post_cluster.php', {
method: 'POST',
body: JSON.stringify(data)
}).then(response => {
if (response.status === 200 && response.ok) {
return response.text();
}
}).then(message => {
console.log(message);
});
对于不支持Fetch API的浏览器来说,可以使用旧的API XMLHttpRequest
. 它做的是同样的事情,但写法不同。
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (this.status === 200) {
console.log(this.responseText);
}
}
xhr.open('POST', '/php-scripts/post_cluster.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(JSON.stringify(data));
一个更类似的方法是使用一个 <form>
元素与 action
属性指向您的PHP脚本。这也将在重新加载页面的同时向PHP文件发送一个请求。然而,读取响应的工作方式不同,因为你需要在渲染过程中在页面上显示响应以查看结果。
<form method="POST" action="/php-scripts/post_cluster.php">
<input type="hidden" name="clustOut" value="Nevermind the real input">
<button type="submit">Send</button>
</form>
因为在上面的例子中,我们已经用了 POST
方法来发送数据,我们需要访问全局的 $_POST
变量来读取已经发送的数据。被返回或回传的值将在响应中发回给客户端。
<?php
$clust_out = isset( $_POST[ 'clustOut' ] ) ? $_POST[ 'clustOut' ] : '';
return $clust_out . ' has been received';
?>