Javascript fetch удалить как удалить html

Проблема: я хочу удалить строку HTML, когда мой заголовок 1 (или 2, или 3,...) удаляется из JSON на сервере. Тем не менее, я могу сделать это только при обновлении.

Я пытался добавить метод AddCards после каждого вызова fetch, но тогда мне нужно было удалить все элементы tr, но я пробовал и это.

Вот изображение сайта.

Изображение сайта

Это код javascript:

let form = document.getElementById('frm');
form.addEventListener('submit', PostBlog)
let alleposts = {};
let numOfPosts = 0;
getPosts();

function PostBlog(event) {
    event.preventDefault()
    let title = document.getElementById("txtTitle");
    let content = document.getElementById("txtContent");
    let data1 = {content: content.value,title:title.value};
    fetch("/posts",
    {
        method: 'POST',
        mode:'same-origin',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data1),
    }
).then(receive).then(response => (response).text()).then(Succeed).catch(problem);
}
function receive(response) {
    if (!(response.ok)){
        throw new Error("Didn't Receive " + response.status);
    }
    return response;
}
function problem(error){
    alert("Not Found " + error);
}
function Succeed(data){
    alert("Found " + data);
    getPosts();
}

function getPosts(){
    fetch("/posts",{
        method:'get',
        headers: {
            'Accept': 'application/json',
        }
    }).then(receive).then(response => response.json()).then(Succeed2).catch(problem);
}

function Succeed2(data){
    alert("Found " + JSON.stringify(data));
    data.forEach((data) => alleposts[`${data.title}`] = data.uuid);
    AddCards();

}

function AddCards(){

    Object.keys(alleposts).forEach((sleutel)=>{VoegVorigePostToe(sleutel)});
}

function Succeed3(data){
    alert("Found " + data);
    numOfPosts--;
}

function DeletePost(event){
    let title = event.target.parentNode.previousElementSibling.innerText;
    console.info(title);
    let key = alleposts[title];
    console.info("alle keys " + JSON.stringify(key));
    fetch(`/posts/${key}`,{
        method:'delete',
        headers: {
            'Accept': 'application/json',
        }
    }).then(receive).then(response => (response).text()).then(Succeed3).catch(problem);
}




function VoegVorigePostToe(title){
    //let title = document.getElementById("txtTitle");
    let thead = document.getElementsByTagName("thead")[0];

    let th = document.createElement("tr");
    let td = document.createElement("td");
    td.setAttribute("id", "th_" + numOfPosts);
    td.innerText = title;
    let delete_button = document.createElement("td");
    let button = document.createElement("button");
    button.innerHTML = "Delete";
    button.addEventListener("click",DeletePost)



    delete_button.appendChild(button);
    th.appendChild(td);
    th.appendChild(delete_button);
    thead.appendChild(th);
    numOfPosts++;

}

HTML-идентификатор выглядит следующим образом: frm = form, txtTitle = поле ввода заголовка.

Не могли бы вы объяснить, в чем проблема, как можно проще? Похоже, у вас проблемы с синхронизацией данных с сервера на клиент? В DeletePost вы первый получаете все публикации и потом удаляете публикацию, на которую вы нажали. Разве не должно быть наоборот?

Emiel Zuurbier 21.03.2022 22:53

Я добавляю заголовок и некоторый контекст, затем отправляю его, чтобы он был добавлен на сервер json. Если я хочу удалить сообщение с сервера, мне нужно обновить его до того, как вызов fetch найдет его, когда я нажму кнопку удаления. Предполагается, что он сначала получит все сообщения, а затем удалит тот, по которому щелкнули, чтобы он был «актуальным».

Adrian Van den Broeck 21.03.2022 23:03

Ах я вижу. Когда вы вызываете конечную точку POST, отвечает ли сервер обновленным набором данных JSON? Тот же вопрос возникает при использовании DELETE?

Emiel Zuurbier 21.03.2022 23:21

Да вот что странно. Он обновляется на самом сервере, но не на странице.

Adrian Van den Broeck 21.03.2022 23:51

@EmielZuurbier Мне удалось решить проблему с вызовами выборки, но я обновил этот пост, указав проблему, которая осталась. Я пробовал несколько способов фактически удалить элемент html tr при удалении с сервера. Но это, похоже, не сработало.

Adrian Van den Broeck 22.03.2022 00:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Уже решил это с помощью:

function DeleteRow(event) {
    let btn = event.target;
    $(btn).closest("tr").remove();
}

Путь! Я вижу, вы использовали jQuery для облегчения этого, но в настоящее время вы можете делать почти то же самое без jQuery: btn.closest('tr').remove(); Оба метода closest и remove являются родными для JS.

Emiel Zuurbier 22.03.2022 10:01

Другие вопросы по теме