2014-01-27 3 views
0

Я использую ajax для сохранения сообщений/комментариев пользователей в таблице mysql без обновления страницы.Как обновлять сообщения mysql каждые 1 секунду

Во-первых: у меня есть это <div id="posts-container"></div>

Во-вторых, я попытался с помощью Jquery нагрузки() в цикле в таблице и вторят сообщения со следующим кодом:

var auto_refresh = setInterval(function() { 
          $('.posts-container').load("refresh_p.php").fadeIn(); 
         }, 0); 

Но это Безразлично» t работа, обновление страницы, но контент не загружается, кто-нибудь знает почему?

В-третьих: Если я скопирую код, содержащий refresh_p.php, и вставьте данные, загрузка будет успешно загружена. Немного странно? Да. Надежда получить любую помощь :)

EDIT: Я зафиксировал его, проблема была в refresh_p.php он ожидает параметр «profile_id» я модифицированную функцию для этого:

1: профиль. PHP

search_user = document.getElementById('user_from').value; 
var auto_refresh = setInterval(function() { 
          $('.posts-container').load("refresh_p.php?search_user="+search_user).fadeIn(); 
         }, 5000); 

2: refresh_p.php

$profile_id = $_GET['search_user']; 

Все хорошо, но теперь т он целая страница обновляется каждые 5 секунд. Я просто хочу, чтобы div-post-container обновлялся.

Я использовал эту функцию раньше, чтобы обновить окно чата, и это сработало, только обновляет div, который я хотел. но здесь он обновляет всю страницу.

+6

Если вы собираетесь обновлять каждые 1 секунду, вам лучше изучить веб-сокеты - это довольно интенсивно. – MackieeE

+0

содержит refresh_p.php содержит php-коды? –

+0

Каждые * одна секунда *? Вы будете создавать там довольно большую нагрузку. Возможно, данные кэшированы, и когда вы загружаете его снова, он видит кэшированную версию. –

ответ

3

Не использовать setInterval. Рекурсивные вызовы загрузки jQuery завершены, таким образом вы убедитесь, что вызовы отправляются один за другим, а не в одно и то же время.

Попробуйте это:

var auto_refresh = function() { 
    $('.posts-container').load("refresh_p.php", function(){ 
      setTimeout(auto_refresh, 800); 
     }).fadeIn(); 
} 
auto_refresh(); 

Кроме того, .fadeIn() работает только в первый раз, после того, что вы должны скрыть DIV перед показом его снова.

Демонстрация: http://jsfiddle.net/P4P9a/1/ (возможно, это медленный, потому что он загружает всю страницу).

LE: Как я думаю, что вы не возвращаете HTML страницу, которую вы должны использовать $.get вместо $.load.

$('.posts-container').get("refresh_p.php", function(data){ 
      $(this).html(data); 
      setTimeout(auto_refresh, 800); 
}).fadeIn(); 
+0

Этот код работает успешно, проблема заключается в том, когда div обновляет данные, содержащие refresh_p.php, не загружается. –

+0

Старые данные? Вы можете удалить его, выполнив сначала '$ ('. Posts-container'). Html ('');' (перед '.load()') – Cristy

+0

№ 'posts-container' появляется без сообщений (пусто). –

0
var auto_refresh = setInterval(function(){ 
    $('.posts-container').load("refresh_p.php").fadeIn(50); 
},1000); 

Изменен интервал от 0 (который только создаст сумасшедший груз ...) до 1000 мс (1 секунда). Должен работать, если ваш путь правильный.

0

Убедитесь, что ваш интервал достаточно длинный, чтобы ваши запросы были завершены. Также подумайте о меньшем количестве вариантов в реальном времени, таких как отправка массива сообщений каждые 15 секунд, показывая их один за другим на стороне клиента. Оптимизируйте свою серверную часть для быстрого ответа с помощью кеширования, а также подумайте об использовании json-данных и шаблонов клиентских сторон вместо html-ответов.

+0

Звонки асинхронны, поэтому они завершатся. Однако порядок, в котором они отображают результаты, может быть не в порядке. – crush

+0

Я не говорю, что они не закончат, но вы не хотите, чтобы они бегали параллельно. – jgroenen

+0

Как вы знаете, что автор не хочет, чтобы они запускались параллельно? – crush

Смежные вопросы