【问题标题】:Check for Cookie ; load() if cookie matches, need to reload to see new content检查 Cookie; load() 如果 cookie 匹配,需要重新加载才能看到新内容
【发布时间】:2018-07-05 06:06:36
【问题描述】:

$(document).ready(function() {

  var hrefs = {
    "en": ["includes/test1.html", "includes/test2.html"],
    "es": ["includes/test3.html", "includes/test4.html"]
  }
  $(function() {
    var cookie = Cookies.get('langCookie');
    if (cookie) {
      $("#div1").load(hrefs[cookie][0]);
      $("#div2").load(hrefs[cookie][1]);
    }
    $("[hreflang]").on("click", function() {
      var lang = $(this).attr("hreflang");
      Cookies.set('langCookie', lang);
      $("#div1").load(hrefs[lang][0]);
      $("#div2").load(hrefs[lang][1]);
    });
  })

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="js-cookie/src/js.cookie.js"></script>
<a href="#" hreflang="en" onclick="window.lang.change('en'); return false;">English</a> | <a href="#" hreflang="es" onclick="window.lang.change('es'); return false;">Spanish</a>

根据 Cookie 值加载内容时遇到问题。

我的 div 是这样设置的:

<div id="prs"> </div>

我有一个伪语言切换器,如果基于cookie,应该将一个html文件加载到div中:

$(document).ready(function() {
var cookie = Cookies.get('langCookie');
if((cookie) === 'en')
{
$("#prs").empty();
$("#prs").load("includes/test.html");
}
else if((cookie) === 'th'){
$("#prs").empty();
$("#prs").load("includes/test2.html");
}
else if((cookie) === 'es'){
$("#prs").empty();
$("#prs").load("includes/test3.html");
}

但是,当我单击链接切换语言时,cookie 已设置,但我必须重新加载页面才能看到新内容。正如您在上面的脚本中看到的,我尝试在加载内容之前在 div 上启动“empty()”。这当然行不通。我读过这个问题可能与 $(document).ready(fucntion)

如何调用它,以便在 cookie 设置为新语言后重新加载 div 的内容,并使用正确加载的 html 文件更新 div?

编辑添加:

用于语言切换的 HTML(基于链接):

<div id="langChanger"><a href="#" onclick="window.lang.change('en'); return false;">Switch to English</a> | <a href="#" onclick="window.lang.change('th'); return false;">Switch to Thai</a> | <a href="#" onclick="window.lang.change('es'); return false;">Switch to Spanish</a></div>

更新:在每个请求下方包含 sn-p。使用 js-cookie.js 创建 cookie。

【问题讨论】:

  • 您将 cookie 设置为新语言的代码在哪里?
  • $(document).ready(function(){}) 仅在页面下载到浏览器后运行。您编写的代码只会在页面加载/刷新时执行。
  • 是的,我认为这就是问题所在。我该如何纠正它?
  • 你能用 LocalStorage 代替 cookie 吗?如果是这样,您可以使用 StorageEvent 来检测值何时更改
  • 使用 cookie,因为我需要在整个网站(7 页)中持久保存翻译。

标签: javascript jquery html ajax cookies


【解决方案1】:

这样会更好。
注意不显眼的事件处理和实际变量的使用,而不是每次都测试它

var hrefs = {
  "en": "includes/test.html",
  "th": "includes/test2.html",
  "es": "includes/test3.html"
}
$(function() {
  var cookie = Cookies.get('langCookie');
  if (cookie) {
    $("#prs").load(hrefs[cookie]);
  }
  $("[hreflang]").on("click", function() {
    var lang = $(this).attr("hreflang");
    Cookies.set('langCookie', lang);
    $("#prs").load(hrefs[lang]);
  });
})
<div id="langChanger">
  <a href="#" hreflang="en">Switch to English</a> |
  <a href="#" hreflang="th">Switch to Thai</a> |
  <a href="#" hreflang="es">Switch to Spanish</a>
</div>

【讨论】:

  • 这很好用!问题,如果我说每种语言需要将 3 个 html 文件加载到 3 个不同的 div 中,我是否需要将其放入数组中?
  • 当然:var hrefs={ "en" : ["url1.html","url2.html","url3.html"], "es": [....], "th":[....]} 使用 hrefs[lang][0] 加载第一个
  • var hrefs={ "en" : { "div1" :"url1.html", "div2":"url2.html" .... 并使用$("divselector").load(hrefs[lang][$("divselector").attr(id)]
  • 谢谢!不得不稍微修正一下您的解决方案(我的其他内容没有改变),但总体而言,它按我的需要工作。
  • 您好,抱歉,但是当我尝试将多个负载加载到不同的 div 中时,load() 无法执行。
猜你喜欢
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多