我正在使用ipinfo.io来检测访问者所在的国家/地区,然后根据该页面重新加载带有附加查询字符串的页面。页面加载后,我想在DOMContentLoaded之后做一些事情。
如果我不重新加载页面,则DOMContentLoaded会很好,但是我希望它可以与重新加载一起使用。我该如何实现?
下面的示例代码:
<p>
答案 0 :(得分:3)
您这里有一个竞赛条件:根据您的描述,getJSON
命令很可能与DOMContentLoaded
事件一起“竞赛”。如果getJSON
在您的DOM准备就绪之前是成功的,那么它将重定向页面并停止该页面上的所有脚本执行。
为避免这种情况,请尝试将getJSON
移至DOMContentLoaded
回调中。
document.addEventListener("DOMContentLoaded", function() {
jQuery.getJSON('https://ipinfo.io', function(data) {
if (data) {
if (data.country) {
if (data.country.toLowerCase() == 'us') {
window.location.replace(window.location.href + "?location=us");
}
}
}
});
// Other logic here
});
另一方面,可以通过组合三个if
语句来避免三重嵌套(请记住,在可能的情况下,请===
使用严格比较):
jQuery.getJSON('https://ipinfo.io', function(data) {
if (data && data.country && data.country.toLowerCase() === 'us') {
window.location.replace(window.location.href + "?location=us");
}
}