Как создать новостную ленту (новостная лента AJAX) - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть информационная система, точнее, информационная система, которая является системой продажи билетов.Информационная система будет содержать учетные записи, которые будут иметь бесконечное или 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 ]

3 голосов
/ 18 ноября 2011

Если вы хотите закодировать его с нуля, основной процесс заключается в создании сценария PHP, который собирает данные и отправляет их обратно в запрос AJAX. Обычно я создаю отдельный PHP-файл, который обрабатывает любую нужную мне операцию.

Все, что ваш PHP-скрипт обычно выводит, отправляется обратно в AJAX-запрос. Так что любые HTML-теги, любые операторы echo / print. Такие вещи, как header (), также создают вывод, просто предупреждение.

В зависимости от дизайна страницы, вы можете создать HTML в PHP, а затем использовать jQuery для размещения этого HTML на странице по мере необходимости. Другой вариант - использовать PHP json_encode () и отправить все данные обратно в виде JSON и создать клиентскую часть HTML-структуры.

Если каждый элемент канала будет иметь одинаковую базовую структуру, то, вероятно, проще всего создать сторону HTML-сервера в PHP, как для любой обычной страницы. Вам нужен только фрагмент кода 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 голос
/ 18 ноября 2011

Ответ Криса дает хороший общий обзор концепции, но не дает обновлений в реальном времени.

Мы используем Ajax Push Engine для наших приложений реального времени на работе.

Если вы не можете использовать PHP и Jquery, вы можете использовать что-то похожее на то, что Крис рекомендовал на стороне сервера, и на стороне клиента собирать таймер, который запускает ajax-запрос время от времени.

Это просто идея, не рабочий код, который я тестировал, но что-то похожее на:

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

См. документацию set3terval () от w3c и Документацию $ .get () * для Jquery для получения более подробной информации.

...