[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вывод данных из БД без перезагрузки страницы
igor717
Добрый ночи.

Есть таблица клиентов в БД, которая постоянно кем-то изменяется. Поэтому вывод на экран средствами php - не подходит. Нужно, чтобы народ видел все изменения сразу же, без перезагрузки.

Подскажите пожалуйста как, с помощью чего это лучше реализовать. Может ссылочку подкиньте, где хорошо описано. Примерам может какой есть.

Спасибо.



Спустя 5 часов, 43 минуты, 9 секунд (16.06.2010 - 06:42) Michael написал(а):
AJAX.

Спустя 2 часа, 25 минут, 19 секунд (16.06.2010 - 09:07) igor717 написал(а):
А можно ли по подробнее...

Спустя 13 минут, 27 секунд (16.06.2010 - 09:20) igor717 написал(а):
О наткнулся на что-то подобное на этом форуме:

<script type="text/javascript">
function upd_message() {
{

$.ajax({
url: "head.php",
cache: false,
success: function(html){
$("#head").html(html);
}
}
);
}

}

setTimeout(upd_message, 800)
</
script>


Здесь походу каждые 0.8 секунды вызывается php скрипт который достает содержимое из БД или нет....

Если не сложно, объясните пожалуйста, как этот маленький кусочек кода работает и как его прикрутить (к id='upd_message'?) или как. Просто в js ну вообще не секу. unsure.gif

Спасибо.

Спустя 38 минут, 19 секунд (16.06.2010 - 09:59) Basili4 написал(а):
Это не чистый js это JQuery все очень просто насервер отпровляется требование запустить скрипт head.php результат работы скрипта передатется в эту ф-цию function(html){
$("#head").html(html);

Она находит селектор #head и вставлеет html код внего а setTimeout(upd_message, 800) устанавливает таймер на 8 сек. через которые снова запустится upd_message все

Спустя 4 минуты, 32 секунды (16.06.2010 - 10:03) igor717 написал(а):
А-а-а, спасибо...
Так значит подключать ее нужно к #head?

Спустя 4 минуты, 20 секунд (16.06.2010 - 10:07) igor717 написал(а):
И все равно не совсем понятно по поводу подключения.

Вот у меня есть контроллер, который выводит таблицу из БД, там я указываю именно его ("head.php"), но этот контроллер впринцепе и выводит все в шаблон. Тогда нужно ли мне передавать результат работы скрипта?

Спустя 55 секунд (16.06.2010 - 10:08) Michael написал(а):
С jQuery конечно все попроще, но если на странице больше js-действий не намечается, то экономнее для тебя использовать например этот класс. Там объяснено как.

А логика та же, только не setTimeout, а setInterval чтобы повторялось.

Или вот так закольцуй:
			success: function(html){
$("#head").html(html);
setTimeout(upd_message, 800)
}

- все таки ответ с сервера тоже какое то время идет.

Цитата
Так значит подключать ее нужно к #head?

#head - это обозначение элемента, в котором будет меняться результат выполнения запроса. Можешь любой который у тебя на странице написать.

Спустя 5 минут, 50 секунд (16.06.2010 - 10:14) Michael написал(а):
Цитата (igor717 @ 16.06.2010 - 09:07)
И все равно не совсем понятно по поводу подключения.

Вот у меня есть контроллер, который выводит таблицу из БД, там я указываю именно его ("head.php"), но этот контроллер впринцепе и выводит все в шаблон. Тогда нужно ли мне передавать результат работы скрипта?

если php-скрипт к которому ты обращаешся служит не только для аякс-запросов, то в нем нужно создать отдельную ветку для обработки запроса. Например по условию isset($_POST['from_ajax'])
При этом
$.ajax({
url: "head.php",
cache: false,
data: "from_ajax=1",


и в этой ветке отдавай уже только то что надо. Можно для html() операции просто нужный кусок передать.

Если использовать jQuery имеется еще удобный метод load - элемент подгружает себе данные с сервера - погугли, там легко.

Спустя 9 минут, 11 секунд (16.06.2010 - 10:23) igor717 написал(а):
Вообще мне нужно сделать вывод пользователей, они могут и быть, и не быть, и статус их может поменяться. И этот блок должен как-то или отслеживать эти изменения и уже потом допустим перезагружать данные из БД (если это реально конечно - но это идеал), или же просто через определенное количество времени перезагружать данные из БД.

Вот что мне лучше поискать? И как лучше сделать, как Вы считаете?

Спустя 34 минуты, 31 секунда (16.06.2010 - 10:58) igor717 написал(а):
Ладно коче туго у меня с пониманием js...

Поэтому прошу помощи.

Вот код файла ну к примеру все того же "head.php", который просто выводит содержимое таблицы из БД:

echo '<table><tr><td>Поле</td>';

$res = mysqlQuery("SELECT * FROM 'table`");

while($row = mysql_fetch_assoc($res))
echo '<tr><td>' . $row['name'] . '</td></tr>';

echo '</table>';


Вот как сделать так, чтобы он запускался каждые 10 секунд без перезагрузки страницы?

Спустя 5 минут, 40 секунд (16.06.2010 - 11:04) Basili4 написал(а):
это надо делать на стороне клиента на серверной стороне тоько через cron

Спустя 3 минуты, 42 секунды (16.06.2010 - 11:07) Michael написал(а):
Цитата
Вот как сделать так, чтобы он запускался каждые 10 секунд без перезагрузки страницы?

ну выше ты же сам нашел код как это сделать ... И дальше тебе уточняли.

Спустя 10 минут, 48 секунд (16.06.2010 - 11:18) igor717 написал(а):
А-а, так значит он подойдет!!! Это радует biggrin.gif .

Значит здесь url: "head.php", я должен указать файл, который будет принудительно запускаться, а здесь
success: function(html){
$("#head").html(html);


- это обертка. Я присваиваю какому-нибудь <div id="head"> и в не и будет выводится весь результат работы.

ТАК? smile.gif

Спустя 3 минуты, 37 секунд (16.06.2010 - 11:22) Basili4 написал(а):
БИНГО Ты это сделал совершено верно

Спустя 9 минут, 24 секунды (16.06.2010 - 11:31) igor717 написал(а):
biggrin.gif
Спасибо всем большое!!!

Спустя 5 часов, 28 минут, 9 секунд (16.06.2010 - 16:59) igor717 написал(а):
Блин что-то не хочет она работать, какой url прописывается если файлы лежат в разных директориях?

url: "head.php",


я имею виду относительный, абсолютный, какой вид он должен иметь?

Спустя 1 минута, 10 секунд (16.06.2010 - 17:00) Basili4 написал(а):
это от корня
url: "/каталог/еще один каталог/head.php"

Спустя 48 секунд (16.06.2010 - 17:01) igor717 написал(а):
блин да вроде все верно тогда...

Спустя 5 минут, 34 секунды (16.06.2010 - 17:07) Michael написал(а):
../ - подняться на папку выше

Спустя 12 минут, 32 секунды (16.06.2010 - 17:19) igor717 написал(а):
у меня это должно срабатывать в админке. Так относительно одминки и нужно прописывать же?

Спустя 5 минут, 32 секунды (16.06.2010 - 17:25) tomash написал(а):
Цитата
у меня это должно срабатывать в админке. Так относительно одминки и нужно прописывать же?

относительно корня сайта!

Спустя 5 минут, 3 секунды (16.06.2010 - 17:30) igor717 написал(а):
В общем приведу структуру:

www   
index.php

//skins
//tpl
//admin

index.tpl (здесь вызываем js)

//js
refresh.js (ненавистный js-файл)

//admin
insex.php
//client
list.php (надо вызвать этот файл)


Подскажите, плиз, как должна выглядеть ссылка

Спустя 8 минут (16.06.2010 - 17:38) tomash написал(а):
../../admin/client/list.php
дето так ))))

Спустя 2 минуты, 1 секунда (16.06.2010 - 17:40) igor717 написал(а):
Спасибо щас попробую у меня просто другой js файл паше с ссылкой /skins/images/down.gif

Спустя 3 минуты, 42 секунды (16.06.2010 - 17:44) igor717 написал(а):
Не не работает может дело не в ссылке а в самом файле

function refresh() {
{

$.ajax({
url: "../../admin/client/list.php",
cache: false,
success: function(html){
$("#rowsClient").html(html);
}
}
);
}

}

setTimeout(refresh, 800)


Вот сам вывод работы php скрипта

<div id="rowsClient"><?php echo $rows_client; ?></div>


Из-за чего он еще может не работать?

Спустя 15 минут, 12 секунд (16.06.2010 - 17:59) tomash написал(а):
попробуйте ../../../admin/client/list.php путь нужно указать относительно index.tpl

Спустя 31 минута, 21 секунда (16.06.2010 - 18:30) Michael написал(а):
Вот от корня пиши (как Basili4 советовал)
/admin/client/list.php 

Спустя 15 часов, 47 минут, 19 секунд (17.06.2010 - 10:17) igor717 написал(а):
Блин, мужики не один вариант не работает, думаю дело не в ссылках. А остальное у меня правильно сделано?

Я уже почти этот модуль закончил, а из-за 5 строчек js-кода шляпа получается...

Спустя 26 минут, 20 секунд (17.06.2010 - 10:44) tomash написал(а):
igor717
может проблемы с правами?

Спустя 11 минут, 47 секунд (17.06.2010 - 10:56) Michael написал(а):
в FireBug на вкладке сеть показываются все твои запросы и красным выделены ошибочные. Вот и посмотри что не так в твоем ajax - приложении.

Спустя 59 секунд (17.06.2010 - 10:57) igor717 написал(а):
ага щас гляну

а что может быть с правами?

Спустя 20 минут, 12 секунд (17.06.2010 - 11:17) igor717 написал(а):
$ is not defined
[Break on this error] $.ajax({

function refresh() {
{

$.ajax({
url: "/admin/client/read_controller_list.php",
cache: false,
success: function(html){
$("#rowsClient").html(html);
}
}
);
}

}

setTimeout(refresh, 800)

Спустя 4 минуты, 49 секунд (17.06.2010 - 11:22) Michael написал(а):
jQuery подключи !!!!!

Спустя 54 секунды (17.06.2010 - 11:22) igor717 написал(а):
???

Спустя 9 минут, 34 секунды (17.06.2010 - 11:32) igor717 написал(а):
Все ясно rolleyes.gif. Ну не работал я с этой фигней никогда sad.gif. Спасибо за помощь и звените, что отнял время.

Спустя 49 минут, 25 секунд (17.06.2010 - 12:21) igor717 написал(а):
Блин короче скачал установил библиотеку. Все заработало.

Но теперь она масляет каждую секунду целеком главную страницу и выводит правда именно в тот блок что и нужно (хотя файл php который подключая в js должен выводить одну табличку)

Почему так происходит?

Спустя 56 минут, 50 секунд (17.06.2010 - 13:18) Basili4 написал(а):
Потомучто скрипт который ты вызываеш пишет в поток твою главную страничку ты сделай так чтобы он писал только табличку

Спустя 1 час, 1 минута, 59 секунд (17.06.2010 - 14:20) igor717 написал(а):
Всмысле отдельный php файл который больше нигде вызываться не будет?

Спустя 11 минут (17.06.2010 - 14:31) tomash написал(а):
Цитата (Michael @ 16.06.2010 - 07:14)
если php-скрипт к которому ты обращаешся служит не только для аякс-запросов, то в нем нужно создать отдельную ветку для обработки запроса. Например по условию isset($_POST['from_ajax'])


Спустя 3 минуты, 52 секунды (17.06.2010 - 14:35) igor717 написал(а):
Я создал отдельный php файл, но он все равно пихает в этот div всю страничку целиком

Спустя 13 минут, 16 секунд (17.06.2010 - 14:48) igor717 написал(а):
Может я вообще смсл этой функции не особо понимаю:

Подключаем php файл -> он выполняется -> из него копируются весь html код -> и вставляется в div с определенным id. Действие выполняется каждые n секунд.

???????

tomash, так что мне этот скрипт нужно в этот if засунуть?

Спустя 21 минута, 32 секунды (17.06.2010 - 15:10) igor717 написал(а):
Заметил фигню, если вообще никакой файл не указывать то она тоже весь контент засовывает в этот див

Спустя 10 часов, 20 минут, 24 секунды (18.06.2010 - 01:30) igor717 написал(а):
Нашел еще один способ. Эта функция подключает list.php в div с id rowsClient
function ref() {
{

$("#rowsClient").load("list.php");
}

}

setTimeout(ref, 1000)


Но результат почему - то тот же вместо таблицы в див лезит вся страница. Да и еще почему-то ей вообще без разницы какой путь и какой файл указываешь (php) - результат один и тот же.
Что она вообще от куда берет тогда?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.