[英]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>
根据实现的复杂程度,应用程序具有的页面数量以及是否要向用户隐藏位置数据,您会想到多种选择。 我将在下面简要列出。
这确实很明显,为了完整起见,我将其放在此处,但是如果您要制作一个单页应用程序就足够了。
如果您的应用程序有多个页面,而您需要做的只是在它们之间保留数据,那么这可能是最简单的解决方案。 这还具有将位置数据暴露给用户的效果,允许他们例如将书签添加到书签或与给定位置共享页面-在您的用例中可能需要也可能不需要。
Cookies仅用于此目的-将键值对保留在用户计算机上,以备后用。 您可以简单地将位置数据另存为cookie,然后检查是否设置了cookie。 如果是这样,请使用Cookie中的数据,而不要进行API调用。 这在两次访问之间仍然存在,因此,如果您担心用户可能会更改位置的情况,则需要设置低有效期限或允许他们重置其位置。
另外,如果您在欧盟境内,则需要将愚蠢的Cookie法律标语放在应用程序的某个位置。
与cookie相同,只是灵活性更高, 在Opera Mini上不起作用 。 如果由于某些奇怪的原因您的位置数据很大,请使用此选项。
显然,这也符合欧盟Cookie法,因此如果您走这条路,请准备横幅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.