2010-02-22 37 views
2

現在我已經用一件我想要做的事情展開了一段時間。 我想做的事情是在頂部顯示一條消息(確認信息,「你已經獲得了2分」)(消息如stackoverflow)。Ajax:在成功將數據保存到數據庫後,在另一個頁面上顯示通知

我已經使用會話變量存儲了一條確認消息,然後在index.php處有一個ajax腳本,每1秒鐘加載一次session.php,以檢查是否有一些消息要顯示。

但是,我想知道,不能用另一種方式做到這一點?我的意思是,它需要所有的時間

我的網站上的index.php設計,以檢查各1秒,然後你正在瀏覽的框架內休息。

無論如何,我已經得到了一個解決方案,因爲你看,我認爲它可能要求太多的服務器。

所以我想知道,不能以另一種方式做到這一點?我的意思是,它需要每隔1秒檢查一次嗎?

心不是有可能,如果你正確地插入批註,並保存會話變量稱爲USER_MESSAGE,然後告訴index.php來顯示#box。

我的評論「form」在show.php上,它只包含一個普通的文本區域和一個提交按鈕。現在它通過一個JS腳本存儲消息,該腳本將所有消息傳遞給一個字符串,insert.php將其插入到數據庫的普通mysql查詢中,並存儲一個會話變量。 (下面的源代碼)

這裏的一些編碼: session.php文件:在index.php中

<?php 
session_start(); 
if(isset($_SESSION['user_message'])) { 
echo 1; 
} 
?> 

格框:

<div id='box' onclick="closeNotice()" style="display: none"> 
Hey, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?> 
<a href="#" class="close-notify" onclick="closeNotice()">X</a> 
</div> 
<?php 
$_SESSION["user_message"] = null; 
?> 

AJAX腳本,刷新每個1秒(即我是現在使用):

function checkSession(){ 
    $.ajax({url: "session.php", success: function(data){ 
     if(data == 1){ 
      $('#box').show(); 
     }else{ 
      $('#box').hide(); 
     } 
    }}); 
} 
setInterval('checkSession()',1000); 

將字符串傳遞給insert.php的腳本,它將插入comm耳鼻喉科到數據庫:

var nocache = 0; 
function insert() { 
document.getElementById('insert_response').innerHTML = "Please Wait .. " 
var fID= encodeURI(document.getElementById('fID').value); 
var kommentar= encodeURI(document.getElementById('kommentar').value); 
nocache = Math.random(); 
http.open('get', 'insert.php?fID='+fID+'&kommentar=' +kommentar+'&nocache = '+nocache); 
http.onreadystatechange = insertReply; 
http.send(null); 
} 
function insertReply() { 
if(http.readyState == 4){ 
var response = http.responseText; 
document.getElementById('insert_response').innerHTML = ''+response; 
} 
} 

的形式show.php:

<div id="insert_response"> 
</div> 
<form action="javascript:insert()" method="post"> 
<textarea id="kommentar" name="kommentar"></textarea><br /> 
<input type="hidden" name="fID" id="fID" value="<? echo $_GET["id"]; ?>" /> 
<input type="submit" name="Submit" value="Sæt ind!"/> 
</form> 
+0

我編輯了你的標題,我是否正確地解釋了你的問題? :D – 2010-02-22 22:26:43

+0

你好。實際上沒有,它應該是「顯示通知,如果isset會話變量」。 – Karem 2010-02-22 22:29:12

+0

似乎不可能:/?但我看到網站做到這一點。堆棧流也 – Karem 2010-02-23 10:05:18

回答

-1

我認爲你需要comet擺脫請求。但是,我自己並沒有使用它,而且我也不太瞭解,因此我無法真正幫助您。

0

爲什麼不設置數據類型爲「腳本」與您的$就call--並有PHP腳本的$就方法調用生成相應的javascript來插入/刪除/顯示/隱藏/修改您的項目頁面相應?

我覺得你過思考這個問題,在這種情況下,我想使用的會話是不必要的,因爲好......我想如果可能的話儘量避免。

看這裏 - http://api.jquery.com/jQuery.ajax/ - 在參數「dataType」爲特定參數「腳本」,我認爲你會發現它有助於你想要完成。

0

除非您希望消息保留在多個頁面中,否則不需要會話。

如果您嘗試在按下submit後將用戶發送到另一個頁面,請將ajax響應存儲到隱藏的輸入中,並使用$ _POST來檢索它。

如果頁面相同,只需將ajax響應保存到box並調用box.show()來顯示即可。

好嗎?

相關問題