JS函数在隐身模式下自动执行?
JS functions self-executing in incognito mode?
我在我的 html 页面末尾加载了一个 javascript 函数 loginsucces(),
这应该在成功登录重定向到页面后执行。它在默认浏览器模式下运行良好(chrome),但是当我以隐身模式加载页面时,它会在第一次加载页面时执行该功能。
由于这种行为,我得到了语法错误,因为 php 变量尚未初始化。我知道我可以以某种方式解决这个问题,但我很想知道为什么 js 函数在首次加载页面时以隐身模式执行,我该如何避免这种情况?
<script>
function loginsuccess(){
if(!<?php echo isAuth() ?>){ return; }
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+<?php echo currentUserId()?>,true);
xhr.send();
}
</script>
你或许应该这样做。
<script>
<?php if (isAuth()): ?>
function loginsuccess(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+<?php echo currentUserId()?>,true);
xhr.send();
}
<?php endif ?>
</script>
或者,为了让事情分开并允许您稍后将代码移出,而不是内联,是在全局变量中预先定义状态。
这可以放在文档的 head
中。
<?php if (isAuth()): ?>
<script>
var user = {
loggedIn: true,
userId: <?php echo currentUserId()?>
};
</script>
<?php endif ?>
现在您的 js 中没有 PHP 变量,您可以根据需要将其移出到 .js 文件中。
<script>
function loginsuccess() {
if (typeof user === "undefined" || user.loggedIn !== true) {
return
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+user.userId,true);
xhr.send();
}
</script>
我在我的 html 页面末尾加载了一个 javascript 函数 loginsucces(), 这应该在成功登录重定向到页面后执行。它在默认浏览器模式下运行良好(chrome),但是当我以隐身模式加载页面时,它会在第一次加载页面时执行该功能。 由于这种行为,我得到了语法错误,因为 php 变量尚未初始化。我知道我可以以某种方式解决这个问题,但我很想知道为什么 js 函数在首次加载页面时以隐身模式执行,我该如何避免这种情况?
<script>
function loginsuccess(){
if(!<?php echo isAuth() ?>){ return; }
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+<?php echo currentUserId()?>,true);
xhr.send();
}
</script>
你或许应该这样做。
<script>
<?php if (isAuth()): ?>
function loginsuccess(){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+<?php echo currentUserId()?>,true);
xhr.send();
}
<?php endif ?>
</script>
或者,为了让事情分开并允许您稍后将代码移出,而不是内联,是在全局变量中预先定义状态。
这可以放在文档的 head
中。
<?php if (isAuth()): ?>
<script>
var user = {
loggedIn: true,
userId: <?php echo currentUserId()?>
};
</script>
<?php endif ?>
现在您的 js 中没有 PHP 变量,您可以根据需要将其移出到 .js 文件中。
<script>
function loginsuccess() {
if (typeof user === "undefined" || user.loggedIn !== true) {
return
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
var json = JSON.parse(xhr.responseText);
...
}
}
xhr.open("GET","http://myurl.com/api/users/"+user.userId,true);
xhr.send();
}
</script>