![]()
Это пятая часть цикла статей о создании web приложения, использующего технологию Ajax для редактирования списка.
В предыдущих статьях мы рассмотрели:
структуру приложения;
создание главной страницы;
добавление новых записей;
и редактирование записей.
Примечание. Вы можете посмотреть демонстрационную версию редактора или скачать архив с файлами проекта.
Теперь добавим возможность удаления записей.
Чтобы удалить запись, пользователю нужно нажать на ссылку с изображением крестика после соответствующей записи. При этом будет вызвана функция deleteItem(), которой в качестве параметра передается id записи в БД.
Рассмотрим, как работает эта функция.
function deleteItem(id) {
var pars = $H({itemid:id}).toQueryString();
new Ajax.Request(
"scripts/delete.php",
{method:"post", parameters:pars,
onSuccess:function(transport) {
var data = eval('(' + transport.responseText + ')');
//удаляем элемент из списка
var listElem = $('itemId_' + data.deletedId).parentNode.getAttribute('id');
Element.remove(listElem);
var listNum = listElem.substring(8);
//обновляем номера у всех остальных записей
var nodes = $$('#list li');
nodes.each(
function(node, index) {
if (index >= listNum) {
node.setAttribute('id', 'listNum_' + index);
var innerNodes = $A(node.getElementsByTagName('div'));
innerNodes[0].innerHTML = index + 1;
innerNodes[1].setAttribute("onclick", "closeOtherEditors(" + index + ")");
}
}
);
//удаляем редактор из массива
editors.splice(listNum,1);
}}
);
}
В строках 2, 3 мы формируем строку с параметрами и выполняем Ajax запрос. В данном случае вызывается скрипт delete.php.
Если вызов прошел успешно, то будет выполнена анонимная функция, объявленная в параметре onSuccess запроса.
В этой функции последовательно выполняем следующие операции:
1) определяем id удаленного элемента (строка 7);
2) определяем элемент списка (тег <li>), в котором находится удаленный элемент (строка 9);
3) удаляем найденный элемент списка (строка 10);
4) определяем порядковый номер удаленного элемента (он не совпадает с id) (строка 11);
5) обновляем порядковые номера у всех оставшихся элементов списка (строки 13-23);
6) удаляем редактор из массива editors (строка 25).
Как видите, код довольно громоздкий, но не сложный.
Единственное на что, хотелось бы обратить ваше внимание, это строка 18. В ней с помощью функции $A() мы создаем массив всех блоков (теги <div>), которые находятся внутри текущего элемента списка. После этого мы изменяем их параметры (строки 19, 20).
Теперь рассмотрим, скрипт delete.php, который удаляет указанную запись из БД.
require_once("dbdata.php");
$id = null;
$id = $_POST['itemid'];
if (($id != null) && ($id > 0)) {
//удаляем запись в БД
$con = connect();
$updateQuery = sprintf("DELETE FROM listitems WHERE id=%d",
mysql_real_escape_string($id));
if (mysql_query($updateQuery)) {
$results['deletedId'] = $id;
}
else {
$results['error_mes'] = "Не могу обновить запись: ".mysql_error();
}
}
if ($con != null) {
mysql_close($con);
}
echo json_encode($results);
Как видите, этот скрипт очень похож на скрипты обновления и удаления записей, описанных ранее. Поэтому я остановлюсь только на особенностях.
Прежде всего, обратите внимание на запрос (строка 8) и использование функции mysql_real_escape_string, которая позволяет предотвратить атаки типа SQL Injection.
Принцип ее работы заключается в том, что она экранирует служебные символы SQL.
В результате выполнения скрипта будут возвращена строка в формате JSON, содержащая id удаленного элемента или сообщение об ошибке.
Примечание. Подробнее об использовании формата JSON можно почитать в статьях Передача данных с помощью JSON и Использование JSON в web приложениях.
В принципе, на данном этапе реализованы все функции нашего приложения.
В следующий раз мы рассмотрим установку и настройку приложения, а также изменим внешний вид списка с помощью таблицы стилей (CSS).
Интересно почитать
Входные металлические двери высокого и современного качества ТЕПЕРЬ по доступным ценам!!!


