2013-07-26 41 views
0

我有一个jQuery函数来显示各种事情,取决于用户是否登录。jQuery .show()无法工作,直到刷新

的功能是在其被包括在每一个网页(I尝试过的页面的头部内具有相同的结果的问题

的ID的loggedIn被设定为显示的标题:无和jquery的应显示一次登录,但它从来不会。

我既的loggedIn和loggedOut但幽冥测试出现,但头不更新链接,尽管在刷新后,这就是另一个问题。
在页眉,我必须在链接更改之前刷新页面。

非常感谢吨的帮助。

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

既不的loggedIn或loggedOut元件的显示在下面的代码。

<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 
+0

'console.log'中是否有错误? –

+0

@DKM - 不,根本没有。 – user2608855

+0

你正在检查如果PHP输出是真/假,但你不打印出bollean(JSON编码部分)。这是打算?你不能通过一个bollean从PHP到这样的JavaScript – Skarlinski

回答

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); 
}); 

像这样的东西应该工作。

编辑 主要想法是你必须经常检查用户是否登录,而不仅仅是文件准备好。为了达到这个目的,你可以使用setInterval,它将根据传入参数的间隔值继续执行该功能。这样,如果此脚本在您的所有页面上运行,则用户的所有页面都将在他登录/注销时自动更新,而不仅仅是他触发登录事件的页面。

+0

辉煌!谢谢!我对ajax做了一些改变,现在它运行的很好。谢谢。我取消了在ajax上的成功隐藏,现在它看起来光滑:) – user2608855

+0

描述什么问题,而不是仅仅演示代码示例,更多的教育也为未来的其他人提供更少的具体问题,但涉及到一个如上所述。 –

+0

此外,这个脚本每秒运行一次是否是一个好主意(或者需要)?那么使用'setTimeout'代替延迟后运行一次呢?这只是一个黑客。真正的问题是我在回答中描述的关于缓存的问题。 –

1

这很可能是由于浏览器在脚本标记(及其全局变量)中缓存脚本。

你可以做的是从外部引用脚本,然后在它后面追加一些随时更改的随机字符串。然后

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

myscript.php内容将是你的代码。

通过这种方式,浏览器将不断引导相信脚本已经改变。请记住,它广播的myscript.php的标题MIME类型必须是text/javascript,以确保它在所有浏览器中都能正常工作。

我知道它可能不是最干净的解决方案,但它应该工作得很好。

+0

因此,将脚本放在另一个文件中。我有一个ajax调用的helper.js文件,我猜它可以存在。 然后添加您发布到每个文件的标题的脚本标记? – user2608855

+0

突然意识到它不能在该js文件中:) – user2608855

+0

当我进行您所建议的更改时,什么都不显示。检查控制台,它返回一个无法调用非成员对象 - FFS – user2608855

相关问题