Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ajax. Обновление части страницы
 
 автор: Diplex   (27.09.2009 в 17:37)   письмо автору
 
 

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

Вывожу из бд список, около каждой надписи из списка есть кнопка "удалить". Сделал, чтобы удалялось всё с помощью аякса, а теперь понадобилось, чтобы после удаления происходило обновление списка записей, не всей страницы, а именно только таблицы с записями.
Мысли привели к тому, что таблицу заключить в единый div с именем, и работать с этим именем. Но попробовал поэкспериментировать, когда удаляю, не просто выполнить удаление, но ещё и вывести запись, но запись не выводится, и все мысли с обновлением страницы сразу отпали. Есть ли какие мини-примерчики у кого под рукой?
Буду очень признателен за помощь!

  Ответить  
 
 автор: cheops   (27.09.2009 в 17:45)   письмо автору
 
   для: Diplex   (27.09.2009 в 17:37)
 

Вообще демонстрация AJAX-технологии осложняется тем, что протокол и браузеры не берут на себя львиную часть работы и каждый раз приходится вываливать кучу данных: структуру базы данных, её серверную обвязку (скажем на PHP), клиентскую часть, включающую библиотеку JS.

В последнее время ситуация упрощается, так как появляются пусть объемные, но достаточно функциональные JavaScript-библиотеки (к сожалению, ни одна из них не вошла пока в стандартный набор JS библиотек и попыток в эту сторону тоже не наблюдается). Используете ли вы какую то библиотеку, скажем jQuery? Просто иначе сейчас либо с вашей стороны, либо со стороны отвечающего придется вываливать тонны кода.

  Ответить  
 
 автор: Diplex   (27.09.2009 в 17:53)   письмо автору
 
   для: cheops   (27.09.2009 в 17:45)
 

Нет, мне не нравятся эти библиотеки, мне от аякса нужно не так много, чтобы их использовать. Сейчас использую этот код, чтобы удалять не нужные div'ы:


<script language="Javascript"> 
function xmlhttpPost2(strURL) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=windows-1251');
    self.xmlHttpReq.send(null);
}

function uppage(str,id) 

document.getElementById(id).innerHTML = str; 

</script>


Но этот код, будет работать параллельно. Как я понимаю, нужен ещё один код, который будет работать с определенным div'ом, т.е. при выполнении какого-то действия (в моём случае - удаление), будет идти ещё один "сигнал", который будет обрабатывать определенный div, таким образом: очищать выведенный в div контент, и выполнив новый запрос к бд, выводить новый контент, на старом месте. Чтобы было понятнее, что я делаю: то у меня выводится некое количество записей на страницу, которые делятся постранично, и удалив одну запись, вместо моего "топа" в 20 записей, остается всего 19, а мне нужно восполнить список так, чтобы опять стало 20.

  Ответить  
 
 автор: Lelik   (27.09.2009 в 18:10)   письмо автору
 
   для: Diplex   (27.09.2009 в 17:53)
 

вот

  Ответить  
 
 автор: Diplex   (27.09.2009 в 18:30)   письмо автору
 
   для: Lelik   (27.09.2009 в 18:10)
 

Спасибо, как-то уже наталкивался на эту статью. Ща буду разбираться.
Но сам нашёл вот это - http://www.w3schools.com/PHP/php_ajax_database.asp
Уже почти сделал, но есть недочёты, пробую исправить.

p.s. Невероятно, но справился с задачей :) Всем спасибо!!

  Ответить  
 
 автор: Рома   (27.09.2009 в 18:56)   письмо автору
 
   для: Diplex   (27.09.2009 в 18:30)
 

если я вас правильно понял, то алгоритм здесь прост.

при загрузке страницы срабатывает событие onload тега body, вызывающее обращение к серверу за данными, которые подружаются в div, ну или что-то подобное. для этого вы обращаетесь к файлу php за 20-ю строчками кода, а ajax их тут же вставляет. тогда чтобы при удалении (или добавлении) записи из базы (в базу) тут же обновлялись результаты, вам нужно сделать такую же функцию, как и та, которая эти записи выводит изначально, но чтобы включалась она по событию удаления (записи). соответственно файл php должен не просто удалить (записать) данные, но и отобразить тут же уже новый список из двадцати строчек, а функция в свою очередь сразу подрузит новые результаты. получается, что все файлы php редактирующие базу долны быть настроены на выдачу результатов.

  Ответить  
 
 автор: Diplex   (27.09.2009 в 22:50)   письмо автору
 
   для: Рома   (27.09.2009 в 18:56)
 

Да, именно так и сделал :) Возникла проблема, с которой сломал голову. Не всегда обновлялись данные, только после ручной перезагрузки. Оказалось, что идущие запросы на удаление и получение нового списка, выполнялись так, что сначала получал список, а потом удалялся не нужный элемент. Пришлось в том месте, где идёт обновление списка, поставить usleep на 0,3 секунды и всё сразу стало хорошо)))

  Ответить  
 
 автор: sl1p   (28.09.2009 в 16:33)   письмо автору
 
   для: Diplex   (27.09.2009 в 22:50)
 

[поправлено модератором]

  Ответить  
 
 автор: Diplex   (28.09.2009 в 16:38)   письмо автору
 
   для: sl1p   (28.09.2009 в 16:33)
 

ваше слово?
у меня удаление и обновление списка в разных файлах...

  Ответить  
 
 автор: sl1p   (28.09.2009 в 16:43)   письмо автору
 
   для: Diplex   (28.09.2009 в 16:38)
 

Ну, а если там заглючит чего, и будет выполняться дольше чем 0.3 сек?

Я бы сделал сначала удаление, потом, когда придёт ответ о том, что удаление прошло успешно, давал бы уже запрос на вывод базы.

  Ответить  
 
 автор: Diplex   (28.09.2009 в 16:45)   письмо автору
 
   для: sl1p   (28.09.2009 в 16:43)
 

Абсолютно согласен, так и буду делать. Просто я написал, с чем провозился и как исправил праблу... :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования