|
|
|
| Всем привет, задался целью всё-таки начать применять современные технологии и вот к вам за помощью :)
Вывожу из бд список, около каждой надписи из списка есть кнопка "удалить". Сделал, чтобы удалялось всё с помощью аякса, а теперь понадобилось, чтобы после удаления происходило обновление списка записей, не всей страницы, а именно только таблицы с записями.
Мысли привели к тому, что таблицу заключить в единый div с именем, и работать с этим именем. Но попробовал поэкспериментировать, когда удаляю, не просто выполнить удаление, но ещё и вывести запись, но запись не выводится, и все мысли с обновлением страницы сразу отпали. Есть ли какие мини-примерчики у кого под рукой?
Буду очень признателен за помощь! | |
|
|
|
|
|
|
|
для: Diplex
(27.09.2009 в 17:37)
| | Вообще демонстрация AJAX-технологии осложняется тем, что протокол и браузеры не берут на себя львиную часть работы и каждый раз приходится вываливать кучу данных: структуру базы данных, её серверную обвязку (скажем на PHP), клиентскую часть, включающую библиотеку JS.
В последнее время ситуация упрощается, так как появляются пусть объемные, но достаточно функциональные JavaScript-библиотеки (к сожалению, ни одна из них не вошла пока в стандартный набор JS библиотек и попыток в эту сторону тоже не наблюдается). Используете ли вы какую то библиотеку, скажем jQuery? Просто иначе сейчас либо с вашей стороны, либо со стороны отвечающего придется вываливать тонны кода. | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Diplex
(27.09.2009 в 17:53)
| | вот | |
|
|
|
|
|
|
|
для: Lelik
(27.09.2009 в 18:10)
| | Спасибо, как-то уже наталкивался на эту статью. Ща буду разбираться.
Но сам нашёл вот это - http://www.w3schools.com/PHP/php_ajax_database.asp
Уже почти сделал, но есть недочёты, пробую исправить.
p.s. Невероятно, но справился с задачей :) Всем спасибо!! | |
|
|
|
|
|
|
|
для: Diplex
(27.09.2009 в 18:30)
| | если я вас правильно понял, то алгоритм здесь прост.
при загрузке страницы срабатывает событие onload тега body, вызывающее обращение к серверу за данными, которые подружаются в div, ну или что-то подобное. для этого вы обращаетесь к файлу php за 20-ю строчками кода, а ajax их тут же вставляет. тогда чтобы при удалении (или добавлении) записи из базы (в базу) тут же обновлялись результаты, вам нужно сделать такую же функцию, как и та, которая эти записи выводит изначально, но чтобы включалась она по событию удаления (записи). соответственно файл php должен не просто удалить (записать) данные, но и отобразить тут же уже новый список из двадцати строчек, а функция в свою очередь сразу подрузит новые результаты. получается, что все файлы php редактирующие базу долны быть настроены на выдачу результатов. | |
|
|
|
|
|
|
|
для: Рома
(27.09.2009 в 18:56)
| | Да, именно так и сделал :) Возникла проблема, с которой сломал голову. Не всегда обновлялись данные, только после ручной перезагрузки. Оказалось, что идущие запросы на удаление и получение нового списка, выполнялись так, что сначала получал список, а потом удалялся не нужный элемент. Пришлось в том месте, где идёт обновление списка, поставить usleep на 0,3 секунды и всё сразу стало хорошо))) | |
|
|
|
|
|
|
|
для: Diplex
(27.09.2009 в 22:50)
| | [поправлено модератором] | |
|
|
|
|
|
|
|
для: sl1p
(28.09.2009 в 16:33)
| | ваше слово?
у меня удаление и обновление списка в разных файлах... | |
|
|
|
|
|
|
|
для: Diplex
(28.09.2009 в 16:38)
| | Ну, а если там заглючит чего, и будет выполняться дольше чем 0.3 сек?
Я бы сделал сначала удаление, потом, когда придёт ответ о том, что удаление прошло успешно, давал бы уже запрос на вывод базы. | |
|
|
|
|
|
|
|
для: sl1p
(28.09.2009 в 16:43)
| | Абсолютно согласен, так и буду делать. Просто я написал, с чем провозился и как исправил праблу... :) | |
|
|
|