LINUX.ORG.RU

Нет вывода в div через JQuery

 


0

1

Здрасте. Хочу в ПХП запилить плавное появление контента. Есть index.php, в нем хочу вывести содержимое из content.php. Через include ('content.php') все работает, вывод отображается. Через JQuery говорит об этой ошибке и постоянно обновляет этот div - значит работает. Вот коды этих страниц. Что не так?

// index.php
<div id="content">
    <script type="text/javascript">
        var auto_refresh = setInterval(
                function(){
                    $('#content').fadeOut('slow').load('content.php').fadeIn("slow");
                }, 3000);
    </script>
<?  include ('content.php'); ?>
    </div>
// content.php
<?php
    while ($row = $q->fetch()) {
        $year=date('Y') - $row[YEAR];

        print "<div class=\"data_item\">
            <h2>$row[NAME]</h2>
            <b>Sex:</b> $row[SEX]<br />
            <b>Age:</b> $year<br />
            <b>Country:</b> $row[COUNTRY_ID]<br />
            <b>Phone:</b> $row[PHONE]<br />";
            if ($row[SKYPE] !== '') print "<b>skype:</b> <a href='skype:keed?call'>$row[SKYPE]</a><br />";
            print "</div>";
    }
?>

ЧЯДНТ?

Зачем скрипт находится в блоке, в который ты загружаешь контент? Зачем делашь это каждые три секунды? Зачем в этом же блоке подключение php-файла?

metrokto ★★
()

Вот рабочий говнокод:

<div style='display: none;'>
  <?php include_once 'content.php'; ?>
</div>
<script type='text/javascript'>
  $('div').fadeIn ('slow');
</script>

Еще раз подчеркиваю, что это говнокод, нужно учиться делать нормльно.

metrokto ★★
()
Ответ на: комментарий от metrokto

Зачем делашь это каждые три секунды?

Хочется, что бы данные появлялись по мере поступления, вот и поставил интервал обновления

KERNEL_PANIC ★★★
() автор топика
Ответ на: комментарий от KERNEL_PANIC

load затирает содержимое контейнера (данные ведь болжн быть доступны дольше трех секунд), используй get + append/prepend.

metrokto ★★
()

setInterval - неправильно. Запрос будет слаться каждые 3 секунды, независимо от проблем с сетью. В итоге при проблемах с сетью может скопиться огромная очередь запросов. Используй clearTimeout перед началом запроса + setTimeout после его выполнения (не важно, успешный ли, не успешный ли).

// Переменная с таймером
var t = null;

function update() {
    // Начинаем процесс обновления - отключаем таймер
    if (t !== null) {
        clearTimeout(t);
        t = null;
    }

    // Грузим данные
    $.get('content.php')
        // При успешной загрузке...
        .done(function(content) {
            // ...скрываем старый блок
            $('#content').fadeOut('slow', function() {
                $(this)
                    .html(content) // Пока он скрыт - меняем его содержимое,..
                    .fadeIn('slow'); // ...после чего показываем
            });
        })
        // Успешно, не успешно ли был загружен файл - ставим новый таймер на вызов функции обновления
        .always(function() {
            t = setTimeout(function() {
                update();
            }, 3000);
        });
}

update();

Если что, код не тестировал, но суть, думаю, понятна.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.