WebApp Design: un modo migliore di aggiornare le informazioni in un elemento DOM

0

Sfondo:
Stavo lavorando a un progetto personale per creare un'app Web Checklist delle attività. Ho lavorato sul codice con vanilla golang e javascript. È un'app molto semplice con funzionalità limitate. Ho usato un json-rpc come endpoint per l'applicazione.

Codice e implementazioni:
Endpoint:

/getTsk GET
/addTsk POST
/delTsk POST

Implementazione HTML del div aggiornato ajax:

<!-- Pending task loads here -->
<!-- On reload, everything in this div is deleted -->
<!-- The tasks div are then added into this div -->
<div id="pendingTasks"></div>

Codice Ajax Javascript per aggiungere una nuova attività:

function saveTasks(value) {
let request = new XMLHttpRequest();
request.onreadystatechange = function () {
    if (request.readyState == request.DONE) {
        if (request.status === 200) {
            reloadPending(); //If sucessfully added task, then reload the corresponding div
            showAlert("New Task Added.", "alert-success");
        } else {
            showAlert("Failed to Add New Task, Please try again later.", "alert-danger");
        }
    }
};
request.open("POST", ep_prefix + "/addTsk");
request.setRequestHeader("Content-type", "application/json");
request.send(JSON.stringify({ description: value }));
}

Ajax Javascript per ricaricare il div dopo l'aggiunta del task con successo:

function reloadPending() {
let content = document.getElementById("pendingTasks");
content.innerHTML = "";

makeGetRequest("GET", "/getTsks", initPending, showEmptyPending, "?status=0"); //Get all the task from backend again
}

Popolazione di elementi dell'attività in div:

//Population of the entries
let fragment = document.createDocumentFragment();
console.log(tasks.length);
for (let i = 0; i < tasks.length; i++) {
    console.log(tasks[i]);
    let taskElements = createTask(tasks[i], "pending");
    fragment.appendChild(taskElements);
}
document.getElementById("pendingTasks").appendChild(fragment);

Problema:
Ho implementato la mia app in modo tale che, quando una richiesta di posta viene inviata agli endpoint, restituirà solo un codice di successo (http 200) e dovrò fare un'altra richiesta ajax per ottenere i dati dal back-end e aggiorna l'elemento DOM, che causa sfarfallio e non è fluido e anche non pratico, considerando che se ho 100 elementi ho bisogno di recuperare tutti questi elementi solo per aggiungere un elemento.

Domanda:
Come dovrei progettare gli endpoint o la mia applicazione web in modo tale che l'aggiunta di una nuova attività non richieda un ricaricamento completo (recupero di tutte le attività dal back-end) e aggiornamento del div?

Grazie.

    
posta Alphonsus Chen 21.11.2017 - 09:44
fonte

1 risposta

0

Puoi "barare" e non ricaricare la lista di tutte le attività. Presumo che il tuo elenco di attività in sospeso assomigli in qualche modo a questo:

[task #N (created 2017-11-21 09:55)] Ask question on SE

Quello che farei è semplicemente includere l'ID dell'attività (la parte #N ) nella risposta generata dalla richiesta POST . Quindi, avresti tutti i dati necessari per inviare solo questa attività al tuo elenco di attività in sospeso: non è necessario ricaricarle tutte.

Intendiamoci, non sono un esperto quando si tratta dell'API REST o della progettazione di applicazioni Web, ma generalmente cerco di semplificarmi la vita. Se sai che avrai bisogno di alcuni dati, progetta le tue chiamate API per restituirle. Quando si chiama una funzione (o si invia una richiesta HTTP) che crea una risorsa (un'attività, nell'esempio) la si progetta per restituire un ID risorsa per la cosa appena creata.

Evita il lavoro quando non è necessario: se hai appena aggiunto un compito, perché dovresti ricaricarli tutti? Ciò ridurrebbe lo sfarfallio, il traffico e i ritardi.

    
risposta data 21.11.2017 - 11:04
fonte

Leggi altre domande sui tag