JS功能在隐身模式下自动执行?

时间:2018-03-10 07:39:04

标签: javascript php incognito-mode

我在html页面末尾加载了一个带有函数loginsucces()的javascript, 应该在成功登录重定向到页面后执行。它在默认浏览器模式(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>

1 个答案:

答案 0 :(得分:1)

你应该这样做。

Android Studio

或者将事物分开并允许您稍后将代码移出,而不是内联,是预先在全局变量中定义状态。

这可以放在文档的<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

现在你的js中没有PHP变量,你可以根据需要将它移动到.js文件中。

<?php if (isAuth()): ?>
<script>
var user = {
  loggedIn: true,
  userId: <?php echo currentUserId()?>
};
</script>
<?php endif ?>