Удаление записи бд с помощью Ajax
Вложений: 1
Здравствуйте, у меня есть список документов, который выводится из БД.
Выглядит это так, как показано на скриншоте. Я сделал удаление записи, удаляет оно верно, вот код jquery:
$(function(){
$("#docsslavep").one("click",function(){
$('#ajaxsuccessdoc').find('.doctext2').each(function(i, elem) {
$( '#ajaxsuccessdoc' ).on('click','#removeslaved'.concat(i),function() {
var id=$('.IDDD'.concat(i)).text();
$.ajax({
type:"POST",
url: "Removedslave.php",
data:{id:id},
success:function(data){
$('#doctext').html(data);
}
});
});
});
});
});
А проблема вот в чем: допустим есть 3 документа. Когда я удаляю последний документ, то из списка документов пропадает не последний документ, а первый. Но после перезагрузки страницы все нормально, удаляет нужный документ. Скорее всего это связано с
success:function(data){
$('#doctext').html(data);
}
#doctext - это блок, в котором отображается вся информация о документе. Не знаю, поняли ли вы что я тут написал. Но в любом случае, как я могу это исправить? |
Цитата:
|
laimas,
в php скрипте у меня просто запрос на удаление. Ничего больше. |
Цитата:
|
laimas,
тоесть кроме удаления я просто должен сделать выборку и вывод? Или я могу как-то проще рефрешнуть данные? |
mazahaler,
перечитайте свой первый пост. Если судить по логике, то вообще не понять о чем там. Если сервер удаляет, но удаляет не то, что запрашивается, то это разработчик, то есть вы, накосячил с параметрами запроса. Запрос клиента, да еще с операциями в БД не должен быть односторонним, клиент должен получить ответ либо об успехе операции, либо о возникших ошибках. |
laimas,
удаляет нужный документ, но сразу после удаления отображается так, будто-бы удалился первый документ, а не последний. НО после перезагрузки все отображает корректно. Пример: Докумнет 1. Документ 2. Документ 3. Удаляю Документ 3. Результат сразу после удаления: Документ 2. Документ 3. Результат после перезагрузки страницы: Документ 1. Документ 2. Тоесть удаляет все верно, но показывает некорректно сразу после удаления. В БД также удаляет корректно. |
Цитата:
|
Вот это что такое?
$("#docsslavep").one("click",function(){
$('#ajaxsuccessdoc').find('.doctext2').each(function(i, elem) {
$( '#ajaxsuccessdoc' ).on('click','#removeslaved'.concat(i),function() {
|
laimas,
Кликаю на кнопку - > перебираю все документы с классом "doctext2" -> Кликаю на кнопку "Удалить". Далее по коду понятно. |
Цитата:
|
laimas, известно.
|
А коли известно, то к чему выдумывать "кошмарики"?
|
laimas,
просто хотелось бы сделать сие действие без перезагрузки страницы. |
Цитата:
Пусть вы запрашиваете для редактирования в базе три записи. Для простоты пусть это будет правка заголовков, а также можно удалять записи. При этом можно выполнить операции сразу для всех строк - групповое редактирование (выбор в форме и ее отправка), а можно производить индивидуальное редактирование каждой записи, отправляя запрос для каждой записи отдельно. Как при этом будет происходить обмен с сервером не важно. При групповом редактировании можно поступить так:
<form>
<input name="title[15]" /> <input type="checkbox" name="del[]" value="15" />
<input name="title[35]" /> <input type="checkbox" name="del[]" value="35" />
<input name="title[75]" /> <input type="checkbox" name="del[]" value="75" />
<button>Обновить</button>
</form>
где числа, это уникальные идентификаторы записей в БД. Изменив значения полей title или выбрав флажок для удаления записи, отправляем форму, которая имеет обработчик события onsubmit:
$('form').submit(function(e) {
e.preventDefault();
$.ajax({
//....
data: $(this).serialize(), //данные формы
//....
})
})
Сервер получая запрос проверяет есть ли записи для удаления/обновления и производит операции:
if($del = array_diff(array_map('intval', $_POST['del']), [0])) {
$_POST['title'] = array_diff_key($_POST['title'], array_flip($del)); //убрать из полей формы записи для удаления
//удаляем записи для WHERE id IN(implode(',', $del))
}
if($_POST['title']) { //есть ли записи для обновления
//обновление
}
//возврат клиенту результата запроса
Ответом может быть запрос в базу, если были обновления, что и будет отражено на клиенте, то есть состояние БД после запроса. То что у вас в событии перебор и куча событий наряду с выбором... Индивидуальный подход, это всего лишь отдельный запрос по каждой записи (ее параметров), и клиенту достаточно знать только положителен или отрицателен результата запроса, и если положителен и было выбрано удаление, то удалить из формы элементы удаленной записи. В данном случае нужно еще добавить на клиенте и анализ выбранной операции. |
laimas,
спасибо вам большое за разъяснения! |
| Часовой пояс GMT +3, время: 02:24. |