Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Segarkan div, tetapi hanya jika ada konten baru dari file php

Saya telah menghadapi masalah serupa belum lama ini, saya berasumsi bahwa Anda menggunakan mysql atau sesuatu untuk sisi server penyimpanan komentar Anda?

Saya memecahkan masalah saya dengan terlebih dahulu menambahkan kolom integer timestamp ke tabel mysql saya, kemudian ketika saya menambahkan baris baru, saya cukup menggunakan time() untuk menghemat waktu saat ini.

contoh sisipan baris mysql:

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

langkah kedua adalah json_encode data yang Anda kirim dari sisi server:

$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

Jadi, sekarang alih-alih html murni, skrip sisi server Anda mengembalikan sesuatu seperti ini:

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

Anda dapat mengambil data dalam javascript cukup sederhana:

<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>

yang cukup banyak menangani komunikasi antara server dan klien, sekarang Anda hanya meminta database Anda seperti ini:

$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;';

Stempel waktu diteruskan bolak-balik, klien selalu mengirimkan stempel waktu yang dikembalikan oleh server dalam kueri sebelumnya.

Server Anda hanya mengirimkan komentar yang dikirimkan sejak Anda memeriksa terakhir kali, dan Anda dapat menambahkannya ke akhir html seperti yang saya lakukan. (peringatan:saya belum menambahkan kontrol kewarasan apa pun untuk itu, komentar Anda bisa menjadi sangat panjang)

Karena Anda melakukan polling untuk data baru setiap 10 detik, Anda mungkin ingin mempertimbangkan untuk mengirim data murni melalui panggilan ajax untuk menghemat bandwidth chunk yang substansial (string json hanya dengan stempel waktu di dalamnya, hanya sekitar 20 byte).

Anda kemudian dapat menggunakan javascript untuk menghasilkan html, ini juga memiliki keuntungan untuk memindahkan banyak pekerjaan dari server Anda ke klien :). Anda juga akan mendapatkan kontrol yang lebih baik atas berapa banyak komentar yang ingin Anda tampilkan sekaligus.

Saya telah membuat beberapa asumsi yang cukup besar, Anda harus memodifikasi kode agar sesuai dengan kebutuhan Anda. Jika Anda menggunakan kode saya, dan rumah kucing|komputer|Anda meledak, Anda dapat menyimpan semua bagiannya :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP memeriksa bidang tanggal basis data dengan tanggal php

  2. Doctrine2 ManyToMany-relation tidak menyimpan

  3. Cara menggunakan kumpulan koneksi dengan Java, MySQL dan Tomcat 6

  4. MySQL - Tabel duplikat

  5. Masukkan Subquery di Select Query