2013-07-26 74 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

相關問題