Обновление страницы при изменении mysql? - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть страница на веб-сайте, которая работает аналогично обратному аукциону. Он имеет таймер обратного отсчета JavaScript, который работает в зависимости от того, как долго продлится аукцион. Когда он достигает нуля, аукцион заканчивается и страница обновляется.

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

Сайт в настоящее время делает это, проверяя php-файл через flash, и когда flash замечает изменение, страница обновляется. Это нормально, но мы убираем флэш-память и используем только javascript, поэтому у нас нет проблем с запуском сайта на iPhone / iPad и других мобильных устройствах.

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

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 12 ноября 2012

Я сделал что-то вроде того, что вы хотите, не используя jQuery;Я не хотел устанавливать jQuery только для одной функции.Это немного общий характер, потому что код, который я на самом деле использовал, был бы бессмысленным для всех остальных.Я использовал страницу PHP в iframe, чтобы периодически проверять, изменилось ли ключевое поле в базе данных.Если это изменило скрипт PHP, установите cookie.На главной странице какой-то javascript периодически читает cookie и обновляет страницу, если cookie указывает, что данные изменились.Вот примерно то, что я сделал.Я изменил код так, чтобы он не соответствовал моим потребностям.

Сначала вам понадобится короткая страница PHP для периодической проверки базы данных (главной странице необходимо установить соответствующие файлы cookie):

<?
//This page is named "check.php"

$OldTimestamp = $_COOKIE["timestamp"];
$id = $_COOKIE["id"];

mysql_connect('localhost','MyUsername','MyPassword');
mysql_select_db('MyDatabase');

$query = "SELECT timestamp FROM MyTable WHERE id = '$id'";
$result = mysql_query($query);
$numrows = mysql_numrows($result);

if($numrows > 0){
  $timestamp = mysql_result($result,0,"timestamp");
  if($timestamp == $OldTimestamp){
    setcookie("DataChanged", "N");
  }else{
    setcookie("DataChanged", "Y");
  }
}

?>
<html>
<head>
<meta http-equiv='refresh' content='5'>
</head>
<body>
</body>
</html>

Загрузить эту страницу в iframe на странице, которую вы хотите обновить

<iframe src='check.php' width='0' height='0' frameborder='0'></iframe>

Теперь вам нужно немного JavaScript на странице, которую вы хотите обновить.Это включает в себя самое короткое устройство для чтения файлов cookie, которое я смог найти, а также код, который проверяет файлы cookie каждые 15 секунд и обновляет страницу, если файл cookie указывает, что данные изменились.

<script language='javascript'>
function get_cookie(name){
  return(document.cookie.match('(^|; )'+name+'=([^;]*)')||0)[2]
}
function checkDatabase(){
  if(get_cookie('DataChanged')=="Y"){
    location.href='ThisPage.php';
  }
}
setInterval(function(){checkDatabase()},15000);
</script>
1 голос
/ 12 ноября 2010

Вы должны создать идентификатор div для показа суммы ставки. И используйте jQuery для обновления суммы через AJAX-вызов, как это сделано ниже.

setTimeout('update_amount()', 1000);

function update_amount(){
        var amt = $("#amount").html();
        $.post('ajax_file.php?a='+amt, function(data){
        if(data!=''){
            $('#amount').html(data);                
        }

Здесь текущее значение, отображаемое на странице, сохраняется в amt . Затем это значение передается в файл php через AJAX как post. Вам нужно будет выполнить процедуры, чтобы проверить, изменилась ли сумма в таблице mySql и, если она изменилась, просто введите новую сумму в этом файле php. Эта сумма будет обновлена ​​в идентификаторе суммы на текущей странице.

1 голос
/ 11 ноября 2010

Используйте jQuery и таймер напр.

setInterval(function(){
   $.getJSON(
     "myPath/myFile.php",
   {
      myData1:myDataVar1,
      myData2:myDataVar2
   },
function(response){
   // Here the code
   });
},1000);

(время в миллисекундах)

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