Ajax: отображение уведомления на другой странице после успешного сохранения данных в базе данных - PullRequest
2 голосов
/ 23 февраля 2010

Я ненадолго отошел от дел, что хочу сделать. То, что я хочу сделать, это отобразить сообщение (подтверждение «Вы заработали 2 балла») вверху (сообщение, подобное stackoverflow).

Я сделал это, сохранив сообщение с подтверждением, используя переменную сеанса, а затем в index.php есть скрипт ajax, который загружает session.php каждую 1 секунду для проверки, есть ли какое-либо сообщение для отображения.

НО мне интересно, разве это не может быть сделано по-другому? Я имею в виду, нужно ли проверять каждую 1 секунду все время

Мой сайт является дизайном на index.php, а затем вы просматриваете все остальное внутри фрейма.

Во всяком случае, у меня уже есть решение для этого, как вы видите, я думаю, что оно может запросить слишком много к серверу.

Так что мне интересно, разве это не может быть сделано по-другому? Я имею в виду, нужно ли проверять каждую 1 секунду все время?

Разве нельзя, если вы правильно вставили комментарий и сохранили переменную сеанса с именем user_message, а затем скажите index.php, чтобы отобразилось поле #.

Моя форма комментария находится на show.php, который просто содержит обычную текстовую область и кнопку отправки. Теперь он сохраняет сообщение через JS-скрипт, который передает все это в строку, в insert.php, который вставляет с обычным запросом mysql в базу данных, и сохраняет переменную сеанса. (исходный код ниже)

Вот немного кодирования: session.php:

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

блок div в index.php:

<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, который вставляет комментарий в базу данных:

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>

Ответы [ 3 ]

0 голосов
/ 23 февраля 2010

Почему бы просто не установить dataType на "script" с вашим вызовом $ .ajax - и заставить php-скрипт, который вызывает метод $ .ajax, генерировать соответствующий javascript для вставки / удаления / показа / скрытия / изменения элементов на вашей странице соответственно

Я думаю, что вы слишком обдумываете эту проблему, использование сессий в этом случае, я думаю, также не нужно ... и я бы, если вообще возможно, попытался бы избежать этого.

Посмотрите здесь-- http://api.jquery.com/jQuery.ajax/ - на параметр «dataType» для конкретного параметра «script», и я думаю, вы найдете его полезным в том, что вы пытаетесь выполнить.

0 голосов
/ 26 февраля 2010

Сеансы не нужны, если вы не хотите, чтобы сообщение оставалось на нескольких страницах.

Если вы пытаетесь отправить пользователя на другую страницу после нажатия кнопки отправки, сохраните ответ ajax в скрытый ввод и используйте $ _POST для его получения.

Если та же страница, просто сохраните ответ ajax в box и вызовите box.show () для отображения.

Хорошо

0 голосов
/ 23 февраля 2010

Я думаю, вам понадобится комета , чтобы избавиться от запросов. Тем не менее, я не использовал его сам, и я не знаю много об этом, поэтому я не могу вам помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...