2011-09-16 49 views
4

我已經嘗試了很多方法讓頁面標題每3秒自動更新一次,因此標題可以顯示它們有多少條未讀消息。自動刷新文檔標題?

這是我曾嘗試:

setInterval(function() { 
     document.title = "<?php echo $inboxcc; ?>"; 
    }, 3000); 

$(function() { 
setInterval(function() { 
    $(this).attr("title", "<?php echo $inboxcc; ?>"); 
    }, 3000); 
}); 

但他們沒有工作。

回答

5

這種方法不起作用。您的PHP語句將在服務器端執行一次,因此無論您在JavaScript中做什麼,標題都不會更改一次。

你需要一個基於AJAX的方法,這將設置成功document.title屬性:

$.ajax({ 
    url: 'new_page_title.php', 
    data: {name: 'username', password: 'userpass'}, 
    success: function(data) { document.title = data;}, 
    dataType: 'text' 
}); 

現在:雖然你一定能妥善保存該代碼放到一個setInterval電話,我會建議檢查它每3秒可能會變得有點困難在您的服務器上,而不是必要的。每15到60秒會更溫和。

setInterval(function() { 
    $.ajax({ 
     ... 
    }); 
}, 30000); // milliseconds 
+0

這工作了一些修改。謝謝 – Andy

1

JavaScript內部的PHP塊無法爲自己更新信息。您需要使用AJAX,隱藏的iframe或其他方式更新標題。此時您的代碼將<title>元素更改爲相同的值。

7

您需要從服務器你想新的數據,每次刷新數據,因爲PHP塊僅每個頁面瀏覽的執行一次(在服務器上)。做一個PHP頁面是這樣的:

<?php 
    // data.php 
    // Grab the user from the session and calculate the 'unread messages' value 
    $user['inboxcc'] = the_unread_messages_value; 
    echo json_encode($user); 
?> 

然後動態地拉數是這樣的:

var updater = function() { 
    $.getJSON('data.php',function(jsonuser){ 
     document.title = jsonuser.inboxcc; 
     setTimeout(updater,3000); 
    }); 
}; 

setTimeout(updater,3000); 

請注意,我用setTimeout代替setInterval,因爲你不能確定每個請求將返回3秒。一般來說使用setTimeout更好。

+0

我真的不知道應該在data.php頁面放置什麼 – Andy

+0

@Andy:無論您在原始頁面上使用什麼代碼來計算$ inboxcc值,都應該在那裏。然後用$ user ['inboxcc'] = the_value行將該值放入用戶對象中; –

+0

不能得到這個工作。我一定做錯了什麼。但是,無論如何感謝 – Andy

-1

你的PHP代碼不能在JavaScript來解釋,所以藏在一個隱藏的輸入值:

<input type="hidden" id="inboxcc" value="<?php echo $inboxcc; ?>"> 

現在你可以在JavaScript調用值:

setInterval(function() { 
     document.title = document.getElementById('inboxcc').value; 
    }, 3000); 
+0

爲什麼不在HTML中使用'

3

爲了補充@ mblase75的回答(這是正確的),下面是對你陷入的常見誤解的進一步解釋。


PHP是一種服務器端預處理其輸出HTML和發送到您的瀏覽器的Javascript,那麼有沒有更多的做任何事情。

所以,你的PHP:

<?php $inboxcc = 'Title'; ?> 
<script type="text/javascript"> 
setInterval(function() { 
    document.title = "<?php echo $inboxcc; ?>"; 
}, 3000); 
</script> 

產生了輸出:

<script type="text/javascript"> 
setInterval(function() { 
    document.title = "Title"; 
}, 3000); 
</script> 

這是你的瀏覽器中看到的。就是這樣。

+0

這很有道理。似乎很愚蠢的想我真的相信它會工作 – Andy

+0

@安迪:是的,有點;-) –