【问题标题】:Cookies are not getting set at the page load页面加载时未设置 Cookie
【发布时间】:2015-08-07 21:38:54
【问题描述】:

当用户第一次访问页面时,我需要设置一些 cookie。所以我清除了浏览器的 cookie,然后尝试加载我的项目。清除 cookie 后。页面加载时未设置 Cookie。我正在使用 Razor 开发 MVC 5

这是我的 JavaScript 代码

  <script src="~/Content/JavaScript/jquery.js"></script>
        <script src="~/Content/JavaScript/jqueryui/jquery-ui-1.10.4.custom.min.js"></script>
    <script type="text/javascript">
        jQuery(document).ready(function () {
            getCookie("user_id");
            if (getCookie("user_id") == "") {
                var user_id = guid();
                setCookie("user_id", user_id, 365);
            }

            var currency_id = getCookie("currency_id")
            if (currency_id == "" || currency_id == null) {
                setCookie("currency_id", "1", 365);
                setCookie("currency_code", "INR", 365);
                setCookie("currency_rate", "1", 365);
            }
            else {
                ChangeCurrencyValue(currency_id)
            }
            ShowCart();
            ShowWishList();

        });
        </script>
  <script type="text/javascript">
     function setCookie(cname, cvalue, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            var expires = "expires=" + d.toUTCString();
            document.cookie = cname + "=" + cvalue + "; " + expires;
        }
        function getCookie(cname) {
            var name = cname + "=";
            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);
                if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
            }
            return "";
        }
      function guid() {
            function s4() {
                return Math.floor((1 + Math.random()) * 0x10000)
                  .toString(16)
                  .substring(1);
            }
            return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
              s4() + '-' + s4() + s4() + s4();
        }
        </script>

我已经尝试将代码放入 &lt;head&gt; 阻止它不起作用

【问题讨论】:

  • &lt;/script&gt; function setCookie(cname, cvalue, exdays) { 你必须把它放在脚本块而不是外面。
  • 它只在脚本块中,我只是以错误的方式复制到这里。我会编辑它
  • 您必须将函数放在一个脚本块中,否则您可能会更改脚本块的顺序。在调用函数之前将函数脚本块向上放置。

标签: javascript jquery asp.net-mvc cookies


【解决方案1】:

我猜的问题是脚本执行顺序。您正在尝试调用不同脚本块中的函数,并且在浏览器中注册之前调用它。

尽量将所有功能和其他代码放在一个脚本块中,而不是不同的:

<script src="~/Content/JavaScript/jquery.js"></script>
<script src="~/Content/JavaScript/jqueryui/jquery-ui-1.10.4.custom.min.js"></script>
<script type="text/javascript">
    jQuery(document).ready(function () {
        getCookie("user_id");
        if (getCookie("user_id") == "") {
            var user_id = guid();
            setCookie("user_id", user_id, 365);
        }

        var currency_id = getCookie("currency_id")
        if (currency_id == "" || currency_id == null) {
            setCookie("currency_id", "1", 365);
            setCookie("currency_code", "INR", 365);
            setCookie("currency_rate", "1", 365);
        }
        else {
            ChangeCurrencyValue(currency_id)
        }
        ShowCart();
        ShowWishList();

    });
  // -------##########---remove the closing script tag---#######
 function setCookie(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toUTCString();
        document.cookie = cname + "=" + cvalue + "; " + expires;
    }
    function getCookie(cname) {
        var name = cname + "=";
        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);
            if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
        }
        return "";
    }
  function guid() {
        function s4() {
            return Math.floor((1 + Math.random()) * 0x10000)
              .toString(16)
              .substring(1);
        }
        return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
          s4() + '-' + s4() + s4() + s4();
    }
    </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多