我有下面的javascript函数,通过ajax调用将变量'widgets'发送到php文件。如果我然后将变量小部件发送回html文档并将其回显,则它会正确地显示在客户端屏幕上。但是当它被发送到php我尝试将其设置为cookie并且cookie没有被设置。这是javascript函数:
function positions(){
var widgets = '';
var col = document.getElementById('col');
for(i = 0; i < col.childNodes.length; i++) {
var str1 = col.childNodes[i].className;
if(str1 && str1.match('widget')) widgets+='&c[1]['+i+']='+col.childNodes[i].id;
}
xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('POST', '/ajaxwidgetpositions.php', true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("widgetpositions="+widgets);
var e = document.getElementById('widget_data');
e.innerHTML += '<p><a>' +widgets + '</a></p>';
xmlhttp.send(null);
return true;
}
这是php:
<?php
$widgetpositions = $_POST["widgetpositions"];
setcookie("widgetss", $widgetpositions);
?>
对于它的价值,javascript varibale'小部件'具有以下形式:
&c[1][1]=widget_5&c[1][2]=widget_11&c[1][4]=widget_1&c[1][6]=widget_13
&c[2][2]=widget_6&c[2][4]=widget_10&c[2][6]=widget_2&c[2][8]=widget_3
&c[3][3]=widget_7&c[3][5]=widget_12&c[3][7]=widget_8
我删除了一些函数位置代码,使其更具可读性,因此上面的“小部件”比您预期的要长一些,但这就是它需要的形式。也许存储在cookie中太多了?
有谁知道为什么它没有设置为cookie?请帮忙。
答案 0 :(得分:0)
您确定数据是在PHP端发布的吗?请使用var_dump($_POST)
。
如果是,您确定您的会话没有过期吗?由于您在设置cookie时没有到期时间,因此会话终止时将被擦除。
尝试
<?php
$widgetpositions = $_POST["widgetpositions"];
setcookie("widgetss", $widgetpositions, time()+60*60);
?>
Cookie是否仍未设置?
答案 1 :(得分:0)
这就是我如何在IE中设置和删除cookie而没有问题
//Always use domain and path to control your cookies better.
//otherwise in IE you can have problem.
//setcookie
$domain = "domain.com"; //without subdomain.
$domain = "/path_of_this_file/"; //without subdomain.
$widgetpositions = $_POST["widgetpositions"];
setcookie("widgetss", $widgetpositions, time()+3600, $path, $domain, false);
//delete cookie
setcookie("widgetss", '', time()-31536001, $path, $domain, false);
?>