通过jQuery.load从数据库中刷新AJAX Div

时间:2011-03-24 21:33:01

标签: php jquery database ajax refresh

我已经为Wordpress编写了一个插件,它会生成一个jQuery.accordion列表,其中包含从数据库中提取的内容。我还通过jQuery.load方法通过单独的页面(update.php)每隔5秒从数据库中提取更新的结果。

我遇到的问题是我在update.php文件中为div生成完整的HTML。看起来我可以让它查询数据库,然后将结果返回到主文件,但我不知道如何去做。基本上,我关注的是效率,因为我正在做的事情可能会对浏览器资源造成很大的负担。我预感到,使用这种方法会继续使用内存,直到它不可避免地达到峰值并且浏览器崩溃。

我正在寻找有关如何更好地编码的任何指导。我在下面提供了概念验证示例,因此我很乐意为任何人提供反馈,无论是建设性的还是批判性的。谢谢!

main.php:

<script type="text/javascript">
$(function() {
  $("#accordion").load("update.php");
  var refresh = setInterval(function() {
    $k("#accordion").load("update.php");
  }, 5000);
});
</script>

<div id="accordion"></div>

update.php:

<?php
function page_update() {
  global $wpdb;
  $out = '';

  $out .= '<script type="text/javascript" src="jquery-1.5.min.js"></script>';
  $out .= '<script type="text/javascript" src="jquery-ui-1.8.11.custom.min.js"></script>';
  $out .= '<script type="text/javascript">
           var $j = jQuery.noConflict();
           $j(function() {
             $j("#accordion").accordion();
           });
           </script>';

  $sql = "SELECT * FROM table ORDER BY name DESC;";
  $results = $wpdb->get_results($sql);

  foreach($results as $res) {
    $out .= '<h3>'.$res->name.'</h3>';
    $out .= '<div id="content-'.$res->name.'">'.$res->score.'</div>';
  }

  echo $out;
}

page_update();
?>

2 个答案:

答案 0 :(得分:0)

  1. 您不应该使用global关键字。 Why?

  2. 在重绘所有手风琴div之前,您应该创建一个函数来检查数据库中是否有任何更改。如果没有变化,则无需重绘。

  3. 如果有更改,您只能重绘受影响的行。

答案 1 :(得分:0)

  

我有一种预感,即使用这种方法,内存使用率将继续攀升,直到它不可避免地达到峰值并且浏览器崩溃。

内存使用率不会继续攀升,因为每次执行update.php都会在再次调用之前完成。你在这里使用setInterval而不是setTimeOut做出了正确的选择,因为在这种情况下,setTimeOut对内存资源的效率会降低。

我不太确定它们是否比setInterval更有效。可能更有效的方法是,如果您将其设置为仅在某些内容发生更改而不是每5秒更新时刷新一次。