Canlı güncellemeler JQuery kullanarak?

2 Cevap php

Şu anda, ben periyodik mesajları döndüren ayrı bir PHP komut dosyası istekleri yapan bir JavaScript (JQuery) ön uç var.

Verimlilik aşkına, ancak, ben sadece hatta mevcut mesajların bakarak değil, diziye new sonuçları eklemek istiyorum.

Haliyle, ben, ancak, benim ilk fikir uyması için sınırlamalar ve yetersizlik fark var (yani "zaman> = $ zaman WHERE SELECT * FROM tablo") kez bunu yapmak için çalıştık.

Herhangi bir fikir orada mı? , Ancak bu tür tek durum ise, ben mecbur mutlu olurum - Ben çok veri aktarmak için XML kullanarak içine benim komut reform zorunda kalmadan bunu tercih ediyorum. :)

2 Cevap

HTML böyle bir şey (Siz duruma göre ayarlamak gerekir) baktı:

<div id="posts">
  <div id="post-1"> ... </div>
  <div id="post-2"> ... </div>
  <div id="post-3"> ... </div>
  <div id="post-4"> ... </div>
</div>

Bu gibi yük isteği güncellemek olabilir:

function loadNewPosts(){
   var id = $("#posts > div:last")[0].id.substr(4);

   $.get('/update.php', { lastId: id }, function(data){
       $("#posts").append(data);
   }, 'html');
}

window.setInterval(loadNewPosts, 1000*60*5) // every 5 minutes

Ve sadece yeni mesajlar için bakmak bir id bu son id sayfada daha büyüktür, ve HTML olarak yenilerini dönmek.

Update yazılarınızın ters kronolojik sırayla, kullanım :first yerine :last ve prepend() yerine append() içinde iseniz

Sizin soru şeylerin bir dizi detay eksiktir. Ben periyodik bir PHP komut dosyası için bir arama yapmak için gidiyoruz olduğunu varsaymak gidiyorum. Ben mesaj tablo otomatik artış kimliği vardır üstlenecek. Bu şekilde bir Sorguya geçmek ve yeni mesajları alabilirsiniz.

var current_id = 1234; // this will need to be filled in somehow

setInterval(get_latest_posts, 10000);

function get_latest_posts() {
  $.getJSON('/latest', {current_id: current_id}, function(data) {
    current_id = data.new_id;
    // process data.posts
  });
}

PHP komut dosyası:

<?php
mysql_connect(...);
mysql_select_db('...');

// retrieve newer posts
$current_id = intval($_POST['current_id']);
$sql = <<<END
SELECT * FROM posts WHERE id > $current_id
END;
$query = mysql_query($sql);
$new_id = $current_id;
$posts = array();
while ($row = mysql_fetch_array($query)) {
  $posts[] = $row;
  $new_id = max($new_id, $row['id']);
}

// return the posts as a JSON object    
header('Content-Type: application/json');
echo json_encode(array(
  'new_id' => $new_id,
  'posts' => $posts,
));
?>

Bu tema üzerinde birçok varyasyon vardır.