通过JS发送Cookie到PHP

问题描述 投票:0回答:1

我试图在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?

javascript php submit bokeh
1个回答
1
投票

用Fetch API发送数据。

客户端和服务器可以通过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);
});

使用XMLHttpRequest发送数据(IE10+)

对于不支持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));

用a表格发送数据。

一个更类似的方法是使用一个 <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';

?>
© www.soinside.com 2019 - 2024. All rights reserved.