php - JS禁用时页面内容不同

标签 php javascript jquery cookies

我在启用 JS 的检测方面遇到了一个小问题。 不太大,因为我知道我走在正确的轨道上。 但这是我的交易:

当我尝试使用此代码在 JS (jQuery) 中设置 cookie

$(window).load(function(){
    $.cookies.set('c_jsEnabled', 'true');
});

或者只是使用此代码在纯 JS 中

function setCookie()
{
    document.cookie='c_jsEnabled=true';
}
<body onload="setCookie();">

然后尝试使用此代码在 PHP 中检测它

if($_COOKIE['c_jsEnabled'] == 'true')
{
    if(file_exists('./main.php'))
    {
        require_once ('./main.php');
    }
    echo getIndex();
}
else 
{
    if(file_exists('./noJS.php'))
    {
        require_once ('./noJS.php');
    }
    echo getIndex();
}
setcookie('c_jsEnabled', '');

需要刷新 2 次页面才能真正将正确的值输入到 PHP 中。 我的猜测是,这基本上意味着 PHP 脚本在 JS 函数被触发之前执行。 这可能是因为上面显示的所有代码都在同一个脚本(index.php)中吗?

这对我来说是一个问题,因为我想阻止人们在禁用 JS 时使用我的网站。

有没有办法在 php 尝试获取 cookie 变量之前设置 cookie?

最佳答案

PHP总是在 JavaScript 之前“触发”,因为 PHP 在服务器上进行处理,然后发送 HTML 和 JavaScript 供浏览器处理和呈现。因此,您永远不能指望 JavaScript 在 PHP 之前执行。

在您的情况下,使用 JavaScript 设置 cookie,然后执行重定向来刷新页面,以便 PHP 可以获取 cookie 值并采取相应的操作。

关于php - JS禁用时页面内容不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999152/

相关文章:

javascript - 将 jQuery ID 作为 JavaScript 函数的参数传递

jquery - JQuery 远程成功回调中不显示标签

JavaScript 对象 : How to create a working object inclusive encapsulation?

php - 找不到 Yii

php - MYSQL 按拆分数组分组

php - 存储到 MySQL 之前进行检查和剥离

javascript - 如何在 MVC 3 的 HTML 表格中使用幻灯片切换?

javascript - 嵌套的 WHILE 循环未按预期运行 - Javascript/Google Apps 脚本

javascript - 使用 KnockoutJS 添加时突出显示

php - Zend Framework 和 Doctrine 2 - 我的单元测试是否足够?