在数据库更新时通过Jquery Ajax跟踪和操作内容

时间:2012-01-08 20:59:07

标签: php javascript jquery mysql ajax

我正在查询数据库以通过Jquery Ajax检索内容,并且通过使用SetInterval函数,它每隔1分钟查询数据库中的新内容。 我的问题是如何跟踪新内容?例如:如果数据库有新内容,我想添加高亮类。怎么办?

检索内容的Jquery代码

    $(document).ready(hot_listings());
    setInterval( "hot_listings();", 10000 );

    var ajax_load = "<img class='loading' src='images/indicator.gif' alt='loading...' />";
    function hot_listings() {
            $.ajax({
                url: "hot_listing.php",
                cache: false,
                success: function(msg) {
                   $("#hot_properties").html(msg);
                }
           });
    }

好吧,我也包括了Php ..

    <?php
    include("includes/initialize.php"); 
    // hot properties, featured
        $per_page = 3;
        global $database;
        $listings = Listings::hot_listings();
        //while ($listing = $database->fetch_array($listings)) {
         foreach ($listings as $listing ) {
            $listing_id         = $listing->listing_id; //initialize listing_id to fetch datas from other table
            $photo              = Photos::find_by_id($listing_id); //initialize table photo
            $comment            = Comments::find_by_id($listing_id);
            $comment_count      = Comments::count_by_id($listing_id);
            $photo_count        = Photos::count_by_id($listing_id);

            //echo $listing['listing_id'];

     ?>

    <li><span class="imageholder">
        <a href="content.php?id=<?php echo $listing->listing_id; ?>"><img class="listingimageSmall" src="<?php if (!empty($photo->name)) { echo 'uploads/thumbs/'.$photo->name; } else { echo 'images/no-thumb-100.jpg'; } ?>" width="66" height="66" ></a>
    </span>
        <h3><a href="content.php?id=<?php echo $listing->listing_id; ?>"><?php echo ucfirst($listing->title) . ' in ' . ucfirst($listing->city) ; ?></a></h3>
        <p class="description">
        <span class="price">Rs <?php echo $listing->price;  ?></span> 

        <span class="media"> <img src="images/icon_img.jpg" alt="Images" width="13" height="12" /> <?php echo $photo_count;?> Images  &nbsp;<img src="images/comments.png" alt="Images" width="13" height="12" />  <?php echo $comment_count; ?> comments &nbsp;</span>
        </p>
    <div class="clear">&nbsp;</div>
     </li>
    <?php } // end of foreach

    ?>

2 个答案:

答案 0 :(得分:4)

答案

我建议您更改PHP部件以发出有关列表的JSON数据。

这可以通过使用PHP函数json_encode()来完成。您可以在http://php.net/manual/en/function.json-encode.php了解有关json_encode()的更多信息。

然后在客户端上,您将能够执行此操作:

$.ajax({
     url: "hot_listing.php",
     cache: false,
     success: function(data) {
       last_received_listings = data;
       build_html_in('#hot_properties', data);
     }
});

在ajax回调中,你记住你刚刚收到的数据,然后从中构建HTML标记。

由于您知道自己已经看过哪些商家信息,因此当您获得新商家信息时,您就可以识别新商品。

       var new_listings = detect_new_listings(data, last_received_listings);
       last_received_listings = data;
       build_html_in('#hot_properties');

       highlight_listings(new_listings); // set a CSS class on a div or whatever

更多详情

可能实施detect_new_listings

function detect_new_listings(original, new) {
  var result = [];
  for(var i = 0; i < original.length; i++) {
    var found = false;

    // find similar listing in new
    for(var j = 0; j < new.length; j++) {
      if(original[i].listing_id == new[j].listing_id) {
        found = true;
        break;
      }
    }

    if(!found) {
      result.push(original[i]);
    }
  }
  return result;
}

答案 1 :(得分:0)

您可以将所有列表放在JS中的数组中,然后将其与PHP文件中新获取的列表进行比较,或者只需检查日期列,其中包含添加行的日期,然后通过PHP;如果行早于1分钟 - 继续并在HTML元素上放置一个类。