0

我有一个 jQuery 函数,可以根据用户是否登录来显示各种内容。

该函数位于每个页面中包含的标题中(我在相关页面的标题中尝试了它,结果相同。

id loggedIn 设置为 display:none 并且 jquery 应该在登录后显示它,但它永远不会显示。

我已经使用loggedIn 和loggedOut 进行了测试,但是没有出现,但是head 确实更新了链接,尽管是在刷新之后,这是另一个问题。
在标题中,我必须在链接更改之前刷新页面。

感谢吨的任何帮助。

<script>
$(document).ready(function () {
    var loggedIn = <? php echo json_encode($general - > loggedIn()); ?> ;
    if (loggedIn == true) {
        $("#loggedIn").show();
    } else {
        $("#loggedOut").show();
    }
});            
</script>

以下代码中均未显示已登录或已登录的元素。

<p id="loggedOut">YOOOOHOOOOOOO</p>
  </div>

<?php

 $body = <<<EOT
        <div class="viewAndDownload" id="loggedIn">
            <a href="../download.php?filename=bla.pdf">Click to download the PDF/>
</div>
EOT;

这是登录框在刷新后才显示的标题中的 HTML:

<nav class = "memberHeaderArea" id="loggedIn">
    Links Here
</nav>

<nav class = "memberHeaderArea" id ="loggedOut">
 Removed links etc to save space
<input type="submit" name="loginButton" id="loginButton" value="Login!"   onclick="validLogin(); return false;"/>

onclick 调用一个ajax函数

function validLogin(){

//removed get username etc

var params = {username: username, password: password};
var url = "../loginProcessAjax.php";

$("#statusLogin").show();

$.ajax({
    type: 'POST',
    url: url,
    data: params,
    dataType: 'json',
    beforeSend: function() {
      document.getElementById("statusLogin").innerHTML= '<img src="../images/loginLoading.gif" /> checking...' ;
    },

    success: function(data) {

        $("#statusLogin").hide();

        if(data.success == true){

            //$('#loggedIn').show();
            $('#loginContent').slideToggle();
            //$('#loggedOut').hide();

        }else{
           // alert("data.message... " + data.message);//undefined
            $("#error").show().html(data.message);
        }

    },
    error: function( error ) {
        console.log(error);
    }
});
}

再次感谢您,这一直困扰着我多年,尽管尝试了很多次,但我还没有找到解决它的方法

编辑:登录功能

public function loggedIn(){

return (isset($_SESSION['id'])) ? true : false;
}//end function
4

2 回答 2

1

这很可能是由于浏览器在脚本标签(以及它的全局变量)中缓存脚本而发生的。

您可以做的是在外部引用脚本,然后在其后面附加一些随机字符串,这些字符串总是会发生变化。

<script src="myscript.php?randomkey=<?php echo date("U"); ?>">
</script>

然后的内容myscript.php将是您的代码。

这样,浏览器将不断被引导相信脚本已更改。请记住myscript.php,它广播的标头 mime-type 必须text/javascript确保它在所有浏览器中都能正常工作。

我知道它可能不是最干净的解决方案,但它应该可以正常工作。

于 2013-07-26T11:03:51.493 回答
1
$(document).ready(function(){
    function testLoggedIn(){
      var loggedIn = <? php echo json_encode($general - > loggedIn()); ?> ;
        if (loggedIn == true) {
          $("#loggedIn").show();
        } else {
          $("#loggedOut").show();
        }
    }

    setInterval(testLoggedIn(),1000);
});

像这样的东西应该工作。

编辑 主要思想是您必须不断检查用户是否已登录,而不仅仅是准备好文档。为此,您可以使用setIntervalwhich 将根据传入参数的间隔值继续执行函数。这样,如果此脚本在您的所有页面上运行,则用户登录/注销时的所有页面都会自动更新,而不仅仅是他触发登录事件的页面。

于 2013-07-26T11:16:17.557 回答