繁体   English   中英

如何优化jQuery.getJSON()进行地理定位

[英]How to optimize jQuery.getJSON() for geolocalisation

我使用jQuery.getJSON()获取访问者的位置,并基于该位置显示/隐藏特定的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法律标语放在应用程序的某个位置。

使用localStorage

与cookie相同,只是灵活性更高, 在Opera Mini上不起作用 如果由于某些奇怪的原因您的位置数据很大,请使用此选项。

显然,这也符合欧盟Cookie法,因此如果您走这条路,请准备横幅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM