2011-11-18 116 views
3

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

如何使用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> 

我在做什么错?

回答

3

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

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

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

如果每个源项目都将有相同的基本结构,那么它可能最容易创建的PHP的HTML服务器端,就像您对任何常规页面。您只需要提供的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的新闻项目的整个列表()。目前这是最简单的方法之一,所以试试看,如果需要的话,还有更有效的方法。

+0

我喜欢你的榜样。你可以让我从步骤1中看到你的PHP例子更详细些吗? –

+0

另外,如何确保相同的信息不会被加载或显示多次? –

+0

至于没有被多次显示,jQuery.load()设置对象的HTML意味着它应该替换已经存在的所有东西。所以它应该只显示来自最新请求的信息。 – Chris

1

克里斯的回答给出了这个概念的高水平概述,但它不会提供实时更新。

我们使用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

+0

这也适用于一个效果? –

+0

将效果应用于什么?你的意思是一个动画什么的,为你的新闻源? – sanukcm

+0

是的。淡入示例 –