我的函数,它可以工作:
<script>
function createCookie(name,value,sec) {
if (sec) {
console.log('createCookie: '+name+', '+value+', '+sec);
var date = new Date();
date.setTime(date.getTime()+(sec*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
{ console.log('readCookie: '+name+',value: '+c.substring(nameEQ.length,c.length));
return c.substring(nameEQ.length,c.length);
}
}
console.log('readCookie: '+name+', NULL');
return null;
}
</script>
调用后台工作(正如我在控制台中看到的)
<?
echo '<script type="text/javascript">createCookie("'.$cookie_random_photo.'","'.$randf.'",60);</script>';
echo '<script type="text/javascript">readCookie("'.$cookie_random_photo.'");</script>';
?>
但当我探测到输出时,这会导致未捕获的语法错误:意外的令牌非法
<?
ob_start();
echo '<script type="text/javascript">readCookie("'.$cookie_random_photo.'");</script>';
$returned_value = ob_get_contents();
ob_end_clean();
?>
或
<?
ob_start();
echo '<script type="text/javascript">readCookie("'.$cookie_random_photo.'");</script>';
$returned_value = ob_get_clean();
?>
这会生成错误,并且屏幕输出"');",不调用readCookie()。
如何正确获取$returned_value?
编辑完整js错误
VM119792:1 Uncaught SyntaxError:
Unexpected token ILLEGAL
c.extend.globalEval @ jquery.js:29
Qa @ jquery.js:16
c.extend.each @ jquery.js:30
c.fn.extend.domManip @ jquery.js:110
c.fn.extend.append @ jquery.js:103
c.fn.extend.html @ jquery.js:107c.ajax.complete @ jquery.js:120
d @ jquery.js:124
x.onreadystatechange @ jquery.js:129
这很可能与服务器和客户端的字符集有关。你能像下面这样在脚本标签中添加charset="utf-8",看看这是否能解决问题吗?
echo '<script type="text/javascript" charset="utf-8">readCookie("'.$cookie_random_photo.'");</script>';
还记得实际打印输出
<?
ob_start();
echo '<script type="text/javascript">readCookie("'.$cookie_random_photo.'");</script>';
$returned_value = ob_get_contents();
ob_end_clean();
echo $returned_value; // <-- Only this will echo the contents back to the client.
?>