【问题标题】:Why does Javascript creates cookie after php function starts to run even if the one is first in order为什么 Javascript 会在 php 函数开始运行后创建 cookie,即使该函数是第一个
【发布时间】:2018-02-09 03:46:41
【问题描述】:

我对代码中的订单有疑问。我想用一种语言创建一个 cookie,然后使用函数 l 进行翻译。这是代码:

<script>
var lang = navigator.language;
if (document.cookie.indexOf("LANG=")==-1) {
    if (lang=="pl"||lang=="en-US") {
        document.cookie = "LANG="+lang+";domain=xxx;path=/";
    } else {
        document.cookie = "LANG=en-US;domain=xxx;path=/";
    }
}
</script>
<?php

include 'translations.php';


function l($t) {
    global $trsl;
    $l = $_COOKIE['LANG'];
    if ($l=="en-US") {
        return $t;
    } else {
        return $trsl[$l][$t];
    }
}
?>

我在进入网站时发现的问题是,当您第一次进入时,它向我显示一个错误,说未定义请求的cookie。但是当我按下 Ctrl+F5 时,一切恢复正常。我猜php代码在js代码之前加载,但这是为什么呢?有什么办法可以预防吗?

【问题讨论】:

    标签: javascript php cookies


    【解决方案1】:

    你的意思是进入网站,你的意思是第一次加载脚本?

    您对每个脚本的处理位置感到困惑。您编写的Javascript意味着在浏览器上加载和处理,而php将在主机上运行。因此,您的 php 将在浏览器中加载整个内容之前被触发并运行。因此错误。

    如果您感到困惑并想知道它是如何发生的,请启动 chrome 开发工具并切换到选项卡网络。然后打开页面并查看请求的标头部分(确保其显示全部/html)。然后按 f5 并与之前进行比较。您将看到在第二个请求中分配了 cookie 标头。

    希望它能回答你的问题。

    【讨论】:

    • 好吧,这解释了很多,但有没有办法防止呢?并在 php 尝试获取之前制作 cookie?
    • 你可以分离你的脚本。创建 html 来创建那些带有 javascript 的 cookie。然后做一些动作去php端。或者在 php 中做一些存在性检查 pf cookie 并使用 set_cookie 在 php 上制作它们或直接分配 $_COOKIE var
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多