2012-01-09 151 views
0

我在寻找自昨天以来解决这个问题,我知道有很多类似的教程,但不知何故,他们没有为我的情况工作。在for循环中设置cookie

我想要做的是设置cookie,每当用户点击任何产品(它应该存储product_id)。所以这个产品将被添加到图表中。

我检查了Chrome浏览器的javascript控制台,但有一个奇怪的错误“Uncaught SyntaxError:Unexpected token}”,它说没有任何存储的cookie。

echo "<div id='products'>"; 
    for($i=0;$i<$num;$i++) 
     { 
      $ftc = mysql_result($result, $i, "product_image"); 
      $ftc2 = mysql_result($result, $i, "product_id"); 
      $ftc3 = mysql_result($result, $i, "product_name"); 
      $ftc4 = mysql_result($result, $i, "product_preis"); 
      $ftc5 = mysql_result($result, $i, "product_old_preis"); 
echo "<a href='details.php?product=".$ftc2."'> 
<div class='products_list'> 
     <img width='217px' height='323px' src='".$ftc."'/> 
     <div class='alt_yazi2'><b>".$ftc3 ." &nbsp;&nbsp;&nbsp;&nbsp 
     <font style='float:right;'>".$ftc4."TL &nbsp;&nbsp<b style='text-decoration:line-through; float:right;'>".$ftc5."TL </b></font></b></a> 
    </br> 
    <div id='sepet'><a onclick='setCookie('ccname', '".$ftc2."', 'expiry');' href='#'> 
    <img width='35px' height='25px' src='images/cart_icon.png'/> 
     </a> 
     </div>  
    </div></div> "; 

     } 
     echo "</div> "; 

    ?> 

而且这段JavaScript代码是在页面头部:

<script type="text/javascript" > 
// JavaScript Document 

var today = new Date(); 
var expiry = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000); 

function getCookieVal (offset) { 
    var endstr = document.cookie.indexOf (";", offset); 
    if (endstr == -1) { endstr = document.cookie.length; } 
    return unescape(document.cookie.substring(offset, endstr)); 
    } 

function GetCookie (name) { 
    var arg = name + "="; 
    var alen = arg.length; 
    var clen = document.cookie.length; 
    var i = 0; 
    while (i < clen) { 
    var j = i + alen; 
    if (document.cookie.substring(i, j) == arg) { 
     return getCookieVal (j); 
     } 
    i = document.cookie.indexOf(" ", i) + 1; 
    if (i == 0) break; 
    } 
    return null; 
    } 

function DeleteCookie (name,path,domain) { 
    if (GetCookie(name)) { 
    document.cookie = name + "=" + 
    ((path) ? "; path=" + path : "") + 
    ((domain) ? "; domain=" + domain : "") + 
    "; expires=Thu, 01-Jan-70 00:00:01 GMT"; 
    } 
    } 

function SetCookie (name,value,expires,path,domain,secure) { 
    document.cookie = name + "=" + escape (value) + 
    ((expires) ? "; expires=" + expires.toGMTString() : "") + 
    ((path) ? "; path=" + path : "") + 
    ((domain) ? "; domain=" + domain : "") + 
    ((secure) ? "; secure" : ""); 
    } 


</script> 

在此先感谢

+0

在任何体面的浏览器中,它都会告诉你它到底在哪里遇到错误(代码的行数)。这些信息通常非常有帮助。 – jfriend00 2012-01-09 15:12:55

+0

也请将'onclick ='setCookie('ccname',''。。$ ftc2。'','expiry');''改为'onclick ='setCookie('ccname','“。$ ftc2。 ', '到期');返回false'' – mplungjan 2012-01-09 15:16:36

+0

它似乎也运行在jsfiddle上:http://jsfiddle.net/ufSs3/1/ – user823255 2012-01-09 15:17:56

回答

2

错误可能是由于此功能toGMTString()。如果您使用过script type="javascript",那么toGMTString()就可以工作。由于您使用的是script type="text/javascript",因此您无需转换为GMT格式,现在浏览器可以为您提供帮助。

我建议你只是删除转换到格林威治标准时间,并尝试。

Regards

+0

是的,我猜,GMTString造成冲突,但它现在的作品谢谢 – mctuna 2012-01-17 04:08:37

1

首先,如果您的浏览器告诉你关于JavaScript错误,你应该能够注意到它所抱怨的代码行,并在那里寻找你的第一个错误。有时候,错误会指向错误之后的一行代码,而不是导致错误的实际行,但它通常位于第一个错误的常规区域中。所以,你应该使用这些信息来帮助这里。

然后,我看到了这些问题:

问题#1:我不知道这是你的第一个问题或没有,但这不会因为引用的工作:

<a onclick='setCookie('ccname', '".$ftc2."', 'expiry');' href='#'> 

你正在尝试使用嵌套在单引号内的单引号。这是行不通的。我不知道你的模板语言是如何工作的,所以我不完全确定如何修复它的那部分内容,但是从HTML/javascript的角度来看,你希望使用嵌套在双引号内的单引号或者反过来像这样:

<a onclick='setCookie("ccname", ".$ftc2.", "expiry");' href='#'> 
+0

我试过了你说的,但是它给了我一个sytax错误,所以我把它改成了所以我已经改变了第一个和最后一个单引号为”\ – mctuna 2012-01-09 15:30:22

+0

现在JavaScript控制台说我未捕获ReferenceError:setCookie没有定义 – mctuna 2012-01-09 15:37:11

+0

这是一件好事,现在的语法是正确的,但JavaScript是区分大小写的。将“onclick”定义更改为使用“SetCookie”而不是“setCookie”并查看会发生什么。 – TLS 2012-01-09 15:41:07

0

GetCookie下面的行是否可能导致意外的语法问题?

if (i == 0) break; 

所有其他if在你的代码语句敷患处线{},但是这一次没有。如果您将其更改为if (i == 0) { break; },那么解决您的语法问题了吗?

+0

不幸的是它并没有改变任何东西 – mctuna 2012-01-09 15:32:51