如何针对地理定位优化 jQuery.getJSON()

How to optimize jQuery.getJSON() for geolocalisation

我使用 jQuery.getJSON() 来获取访问者的位置,并根据该位置我 show/hide 一个特定的 div。因此,由于服务器 api 的限制,我希望每个访问者在访问期间只发送一次请求,可能会在客户端使用会话或缓存来存储访问期间要使用的位置;你有什么建议吗?或现成的实施方案?

    <script>
    $(function () {
        $.getJSON('http://freegeoip.net/json/?callback=?', function (location, textStatus, jqXHR) {
            console.log("callback running");
            console.log(textStatus);
            console.log(jqXHR);
            var div = document.getElementById('showadsbayt');
            jQuery('#region-name').html(location.country_code );
              if (location.country_code != 'MA') {
                      div.style.display = 'none';
              }
        });
    });
</script>  

使用 Web Storage ,下面的代码将查找用户是否访问了您的页面,如果未访问,ajax 将发出请求并设置一个 expire 日期,您可以以天为单位更改值或将 0 设置为永远并确定是否访问 ajax 不会请求。

         < script >
          $(function() {
            var expire = 30; //in days ====> 0 == for ever
            if (!localStorage["visited"] || (+localStorage["visited"] <= new Date().getTime() && +localStorage["visited"] > 0)) {
              localStorage["visited"] = (+expire * 24 * 60 * 60 * 1000) + new Date().getTime();
              localStorage["visited"] = expire == 0 ? 0 : localStorage["visited"];
              $.getJSON('http://freegeoip.net/json/?callback=?', function(location, textStatus, jqXHR) {
                console.log("callback running");
                console.log(textStatus);
                console.log(jqXHR);
                var div = document.getElementById('showadsbayt');
                jQuery('#region-name').html(location.country_code);
                if (location.country_code != 'MA') {
                  div.style.display = 'none';
                }
              });
            }
          }); < /script>

根据您的实施需要的复杂程度、您的应用程序有多少页面以及您是否要向用户隐藏位置数据,会想到多种选择。我将在下面简要列出它们。

保存为全局变量

这个很明显,为了完整起见我把它放在这里,但如果你正在制作单页应用程序就足够了。

附加您感兴趣的位置数据部分作为查询字符串

如果您的应用程序有多个页面并且您需要做的就是跨页面持久保存数据,这可能是最简单的解决方案。这也具有向用户公开位置数据的效果,例如允许他们添加书签或与给定位置共享页面 - 在您的用例中可能需要也可能不需要。

使用 cookie

Cookies 就是为了这个目的——将键值对保存在用户的机器上以备后用。您可以简单地将位置数据保存为 cookie,然后检查该 cookie 是否已设置。如果是,请使用 cookie 中的数据而不是进行 API 调用。这也会在 次访问之间持续存在,因此如果您关心用户可能会更改位置的情况,则需要设置较低的到期时间或允许他们重置其位置。

此外,如果您在欧盟,则需要在您的应用中的某处放置愚蠢的 cookie 法横幅。

使用本地存储

与 cookie 相同,但更灵活 doesn't work on Opera Mini。如果由于某些奇怪的原因您的位置数据很大,请使用此选项。

显然这也属于欧盟 cookie 法,所以如果您走这条路,请准备好您的横幅。