将cookie中的值发送到脚本

Send a value from a cookie to a script

本文关键字:脚本 cookie      更新时间:2023-09-26

我的网站上的用户输入表单将值发送到位于不同服务器上的脚本:

<form action="https://mycompany.formprocessor.com/script/" method="post" name="MyForm" onsubmit="return myFunction();">

我正在用修改后的功能重新创建该表单。我不直接发送表单值,而是将它们保存在cookie中,然后,当某个事件发生时,我才想将该cookie中的输入值发送到作为action属性值提供的url中的脚本。

类似这样的东西:

on event {
 // send cookie value to https://mycompany.formprocessor.com/script/ using "post" method;
}

如何做到这一点?

首先,您需要使用一些cookie函数将值存储在cookie中,然后访问保存在这些cookie中的输入值。以下是一些cookie函数及其使用说明:http://www.codelib.net/javascript/cookies.html

然后,您需要有一种跨域发送数据的方法。为此,我建议您使用一个包含隐藏字段的表单,然后将该表单提交到其他服务器。

像这样:

<form method="post" action="https://mycompany.formprocessor.com/script/">
<input type="hidden" id="hiddendata" name="data" />
</form>
<script>
function onEvent() { /* call this function when your desired event happens */
  var cookiedata = readCookie('cookiename');
  var datafield = document.getElementById('hiddendata');
  datafield.value = cookiedata;
  datafield.form.submit();
}
</script>

请注意,我建议您让formprocessor上的程序返回204 No Content作为其HTTP状态代码,这样文档本身就不会重置。否则,提交数据后,浏览器将用https://mycompany.formprocessor.com/script/的内容替换当前页面。这是一种不阻止跨域请求的AJAX方法。

只有满足于使用GET请求将数据发送到服务器时,以下方法才会起作用。

您可以将页面上包含的元素(如img元素)的src属性设置为如下URL(初始图像来自http://commons.wikimedia.org/wiki/File:1x1.png)

<img id="hiddenimage" width="1" height="1" src="1x1.png" />
<script>
function onEvent() { /* call this function when your desired event happens */
  var cookiedata = readCookie('cookiename');
  var dataimage  = document.getElementById('hiddenimage');
  dataimage.src = 'https://mycompany.formprocessor.com/script/?data=' + encodeURIComponent(cookiedata);
}
</script>

首先,您需要使用一些cookie函数将值存储在cookie中,然后访问保存在这些cookie中的输入值。以下是一些cookie函数及其使用说明:http://www.codelib.net/javascript/cookies.html

然后,您需要有一种跨域发送数据的方法。为此,我建议您使用一个包含隐藏字段的表单,然后将该表单提交到其他服务器。

像这样:

<script>
function onEvent() { /* call this function when your desired event happens */
  var cookiedata = readCookie('cookiename');
  var datafield = document.getElementById('hiddendata');
  datafield.value = cookiedata;
  datafield.form.submit();
}
</script>

请注意,我建议您让程序返回204 No Content作为其HTTP状态代码,这样文档本身就不会重置。否则,提交数据后,浏览器将用https://mycompany.formprocessor.com/script/的内容替换当前页面。这是一种不阻止跨域请求的AJAX方法。

我即将描述另一种无需提交表格即可发送跨域请求的方式…请稍候。

只有满足于使用GET请求将数据发送到服务器时,以下方法才会起作用。

您可以将页面上包含的元素(如img元素)的src属性设置为如下URL(初始图像来自http://commons.wikimedia.org/wiki/File:1x1.png)

<img id="hiddenimage" width="1" height="1" src="1x1.png" />
<script>
function onEvent() { /* call this function when your desired event happens */
  var cookiedata = readCookie('cookiename');
  var dataimage  = document.getElementById('hiddenimage');
  dataimage.src = 'https://mycompany.formprocessor.com/script/?data=' + encodeURIComponent(cookiedata);
}
</script>

您可以使用"document.cookie"获取cookie中设置的值。

更新:

var cookievalue= document.cookie;
var xmlhttp= new XMLHttpRequest();
var url="https://example.com/path?value="+cookievalue;
xmlhttp.open("POST",url,false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.send();

答案在某种程度上取决于接受值的脚本是如何设置的。对于存储和检索值,balaji的建议已经足够好了。这里的插件使存储和从cookie检索值变得非常容易。

因此,例如,如果您将值发送到的函数是这样的:

public void myFunction(firstValue, secondValue){
   // logic here
}

那么你发送值的方式是这样的:

https://mycompany.formprocessor.com/script/firstValue="value_from_cookie"?secondValue="value_from_cookie"