Mysql
 sql >> база данни >  >> RDS >> Mysql

Опресняване на div, но само ако има ново съдържание от php файла

Сблъсквал съм се с подобен проблем не много отдавна, предполагам, че използвате mysql или нещо подобно за сървъра за съхранение на вашите коментари?

Реших проблема си, като първо добавих цяла колона с клеймо за време към моята mysql таблица, а след това, когато добавих нов ред, просто използвах time() за да запазите текущия час.

пример за вмъкване на ред в mysql:

$query = "INSERT INTO comments (name, text, timestamp) VALUES ('". $name ."', '". $text ."',". time() .");";

втора стъпка би била да json_encode данните, които изпращате от страната на сървъра:

$output = array();

if ($html && $html !== '') {   // do we have any script output ?
  $output['payload'] = $html;  // your current script output would go in this variable
}
$output['time'] = time();      // so we know when did we last check for payload update

$json = json_encode($output, ((int)JSON_NUMERIC_CHECK)); // jsonify the array
echo $json;                    // send it to the client

И така, сега вместо чист html, вашият сървърен скрипт връща нещо подобно:

{
  "payload":"<div class=\"name\">Derpin<\/div><div class=\"msg\">Foo Bar!<\/div>",
  "time":1354167493
}

Можете да вземете данните в javascript достатъчно просто:

<script type="text/javascript"> // <![CDATA[

var lastcheck;
var content_main = $('#content_main');

pollTimer = setInterval(function() {
  updateJson();
}, 10000);

function updateJson() {
  var request = '/feed_main.php?timestamp='+ (lastcheck ? lastcheck : 0);

  $.ajax({
    url: request,
    dataType: 'json',
    async: false,
    cache: false,
    success: function(result) {
      if (result.payload) {        // new data
        lastcheck = result.time;   // update stored timestamp
        content_main.html(result.payload + content_main.html()); // update html element
      } else {                     // no new data, update only timestamp
        lastcheck = result.time;
      }
    }
  });
}

// ]]> </script>

който до голяма степен се грижи за комуникацията между сървър и клиент, сега просто правите запитване към вашата база данни нещо подобно:

$timestamp = 0;
$where = '';

if (isset($_GET['timestamp'])) {
  $timestamp = your_arg_sanitizer($_GET['timestamp']);
}

if ($timestamp) {
  $where = ' WHERE timestamp >= '.$timestamp;
}

$query = 'SELECT * FROM comments'. $where .' ORDER BY timestamp DESC;';

Времевите клейма се предават напред-назад, като клиентът винаги изпраща клеймото за време, върнато от сървъра в предишна заявка.

Вашият сървър изпраща само коментари, които са изпратени след последната ви проверка, и можете да ги добавите преди края на html, както направих аз. (предупреждение:не съм добавил никакъв вид контрол на разума към това, коментарите ви може да станат изключително дълги)

Тъй като търсите нови данни на всеки 10 секунди, може да помислите за изпращане на чисти данни през ajax повикването, за да спестите значителна честотна лента (json низ само с клеймо за време в него е само около 20 байта).

След това можете да използвате javascript, за да генерирате html, той също има предимството да прехвърли голяма част от работата от вашия сървър на клиента :). Освен това ще получите много по-фин контрол върху това колко коментара искате да показвате наведнъж.

Направих някои доста големи предположения, ще трябва да промените кода, за да отговаря на вашите нужди. Ако използвате моя код и вашият котешки|компютър|къща експлодира, ще запазите всички части :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. vb.net заявка за показване на конкретни редове от таблица с данни [основен]

  2. Има ли полза от създаването и индексирането на първичен ключ?

  3. изберете последното съобщение от разговора за всеки разговор в mysql

  4. mysqlimport без инсталиране на mysql?

  5. PHP базата данни не показва правилния начин