如何创建新闻源(AJAX新闻源)

时间:2011-11-18 15:46:09

标签: php jquery mysql ajax news-feed

我有一个信息系统,更具体地说是一个票务系统的信息系统。信息系统将包含具有无限或“n”数量用户的帐户。我希望用户能够在新闻源中看到其他用户对内容的操作或更改。 (就像Facebook一样)。我将使用PHP,MySQL和AJAX(或jQuery)来实现新闻源。我将知道如何设置表和查询。

如何使用PHP和AJAX或jQuery提取内容并在新闻源中显示(在Facebook新闻源样式中使用淡入淡出或滚动效果?)。

我一直在寻找一个很好的教程而没有找到一个。如果可能的话,我想从头开始编写代码。

我还有一些问题:这就是我所拥有的:

ajax.php

<?php require_once('../../Connections/f12_database_connect.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_f12_database_connect, $f12_database_connect);
$query_newsfeed_a = "SELECT * FROM newsfeed";
$newsfeed_a = mysql_query($query_newsfeed_a, $f12_database_connect) or die(mysql_error());


while($row_newsfeed_a = mysql_fetch_assoc($newsfeed_a))
{
        echo("<div class='feedItem'>");
    echo("<div class='title'>" . $feedItem['title'] . "</div>");
    echo("<div class='body'>" . $feedItem['body'] . "</div>");
    echo("</div>");



}
$totalRows_newsfeed_a = mysql_num_rows($newsfeed_a);
?>

<?php
mysql_free_result($newsfeed_a);
?>

feed.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>

<script>
    function refreshNews()
    {
        $("#news").load("ajax.php")
    }
</script>
</head>

<body>





<div id="news"></div>
</body>
</html>

我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果要从头开始编码,基本过程是创建一个PHP脚本,收集数据并将其发送回AJAX请求。通常我会创建一个单独的PHP文件来处理我需要的任何操作。

您的PHP脚本通常会输出的任何内容都会被发送回AJAX请求。所以任何HTML标签,任何echo / print语句。像header()这样的东西也会创建输出,只是一个警告。

根据页面的设计,您可以在PHP中创建HTML,然后使用jQuery根据需要将html放入页面。另一个选择是使用PHP的json_encode()并将所有数据作为JSON发回,并构建HTML结构客户端。

如果每个feed项具有相同的基本结构,那么在PHP中创建HTML服务器端可能最容易,就像对任何常规页面一样。您只需要作为Feed的HTML代码段。

最简单的方法是jQuery.load() http://api.jquery.com/load/

HTML页面内:

<script>
    function refreshNews()
    {
        $("#news").load("path/to/ajax.php")
    }
</script>

<div id="news"></div>

在PHP中:

$sql = "SQL TO GET NEWS FEED";

$result = mysql_query($sql);

while($feedItem = mysql_fetch_assoc($result))
{
    echo("<div class='feedItem'>");
    echo("<div class='title'>" . $feedItem['title'] . "</div>");
    echo("<div class='body'>" . $feedItem['body'] . "</div>");
    echo("</div>");
}

然后你可以从另一个事件(刷新按钮,定时事件等)调用refreshNews()。

显然你的html和数据结构可能不同。只需确保这是此PHP文件输出的唯一内容。这包括标签之外的任何内容。

有更有效的方法可以做到这一点,这个脚本实际上会在每次调用refreshNews()时重新加载整个新闻列表。目前,这是使其正常运行的最简单方法之一,因此请尝试一下,如果需要,还有更有效的方法。

答案 1 :(得分:1)

Chris的答案给出了概念的高级概述,但它不会提供实时更新。

我们在工作中使用Ajax Push Engine作为实时应用程序。

如果你已经开始使用PHP和Jquery了,你可以使用类似于Chris在服务器端推荐的东西,并且在客户端一起破解一个定时器,它会经常发出一个ajax请求。

这只是一个想法,而不是我测试过的代码,但类似于:

setInterval ( 
    function(){
        $.get("yourScriptName.php", { userID: 555},
            function(data){
                //update your news feed with data received via ajax request here.
            });
    }, 30000 );

有关详细信息,请参阅w3c's setInterval() documentationJquery's $.get() documentation