带Cookie检查的Geo-redirect代码调试:为何无法正常运行?
你的代码无法运行主要有两个核心问题:
1. 语法错误:多余的闭合括号
代码最后一行的});没有对应的开启语句(没有未闭合的$.ajax或函数调用),这会直接导致浏览器抛出语法错误,阻断整个脚本执行。
2. 缺少Cookie操作依赖
你使用了Cookies.get()方法,但没有引入提供该API的第三方库(比如js-cookie),浏览器中不存在Cookies全局对象,会抛出"ReferenceError: Cookies is not defined"的错误。
修复方案(两种可选)
方案一:使用原生Cookie操作(无需依赖外部库)
直接用原生JS实现Cookie获取,避免引入额外库:
<script async src="https://get.geojs.io/v1/ip/geo.js"></script> <script> // 原生方法获取指定Cookie的值 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } var cookieSwitch = 'geo-switch'; if(typeof getCookie(cookieSwitch) == 'undefined') { // 未检测到Cookie则执行地理重定向 function geoip() { $.ajax({ type: 'get', url: 'https://get.geojs.io/v1/ip/country.json', success: function(data) { if (data['country'] == "NZ") { window.location = "https://www.example.com/"; } } }); } geoip(); } </script>
方案二:引入Cookie操作库
如果想继续使用Cookies.get(),需要先引入js-cookie库:
<!-- 先引入js-cookie库 --> <script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.1/dist/js.cookie.min.js"></script> <script async src="https://get.geojs.io/v1/ip/geo.js"></script> <script> var cookieSwitch = 'geo-switch'; if(typeof Cookies.get(cookieSwitch) == 'undefined') { function geoip() { $.ajax({ type: 'get', url: 'https://get.geojs.io/v1/ip/country.json', success: function(data) { if (data['country'] == "NZ") { window.location = "https://www.example.com/"; } } }); } geoip(); } </script>
内容的提问来源于stack exchange,提问作者Bainn
相关产品推荐
相关产品推荐

