使用ajax将待办事项列表保存到数据库



我有一个工作清单,但当页面刷新时,所有添加的项目都被删除了。

起初,我尝试使用本地存储存储然后检索项目,但我不能让它工作。然后我想起了ajax,但我还是一个初学者,对它并不熟悉。

我找不到一个有效的解决方案,但如果有任何建议,我将不胜感激。

Html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css"
integrity="sha512-1PKOgIY59xJ8Co8+NE6FZ+LOAZKjy+KY8iq0G4B3CyeY6wYHN3yt9PW0XpSriVlkMXe40PTKnXrLnZ9+fkDaog=="
crossorigin="anonymous">
<title>Shopping List</title>
</head>
<body>
<a href="logout.php">
<button class="logout">Logout</button>
</a>

<header>
<h1>Shopping List</h1>
</header>
<form>
<input type="text" placeholder="Enter products" class="todo_input" />
<button class="todo_button" type="submit">
<i class="fas fa-plus-square"></i>
</button>
<div class="select">
<select name="todos" class="filter_todo">
<option value="all">All</option>
<option value="completed">In cart</option>
<option value="uncompleted">Not in cart</option>
</select>
</div>
</form>
<div class="todo_container">
<ul class="todo_list">
<div class="todo">
<li class="todo_item">Tomatoes</li>
<button class="complete_btn"><i class="fas fa-check"></i></button>
<button class="delete_btn"><i class="fas fa-trash"></i></button>
</div>   
</ul>
</div>
<script src="script.js" type="application/javascript"></script>           
</body>
</html>

Javascript:

//selectors
const todoInput = document.querySelector('.todo_input');
const todoButton = document.querySelector('.todo_button');
const todoList = document.querySelector('.todo_list');
const filterOption = document.querySelector('.filter_todo');
//event listeners
todoButton.addEventListener("click", addTodo)
todoList.addEventListener("click", deleteCheck)
filterOption.addEventListener("click", filterTodo)
//functions
function addTodo(event) {
event.preventDefault();
//todo DIV
const todoDiv = document.createElement('div');
todoDiv.classList.add('todo'); 
//todo LI 
const newTodo = document.createElement('li');
newTodo.innerText = todoInput.value;
newTodo.classList.add('todo_item');
todoDiv.appendChild(newTodo);
if(todoInput.value === ""){
return null
}
//check mark BUTTON
const completedButton = document.createElement('button');
completedButton.innerHTML = '<i class="fas fa-check"></i>';
completedButton.classList.add('complete_btn')
todoDiv.appendChild(completedButton);
//delete BUTTON
const deleteButton = document.createElement('button');
deleteButton.innerHTML = '<i class="fas fa-trash"></i>';
deleteButton.classList.add('delete_btn')
todoDiv.appendChild(deleteButton);
//Append to Actual LIST
todoList.appendChild(todoDiv);
//Clear todo input VALUE
todoInput.value = ""
}
//DELETE & CHECK
function deleteCheck(e) {
const item = e.target;
//DELETE ITEM
if (item.classList[0] === "delete_btn") {
const todo = item.parentElement;
//ANIMATION TRANSITION
todo.classList.add("fall")
todo.addEventListener('transitionend', function () {
todo.remove()
})
}
//COMPLETE ITEM
if (item.classList[0] === "complete_btn") {
const todo = item.parentElement;
todo.classList.toggle("completedItem")
}
}
//FILTERING THE TASKS ACCORDING THE OPTION
function filterTodo(e) {
const todos = todoList.childNodes;
for(let i = 1; i<todos.length; i++ ){
switch (e.target.value) {
case "all":
todos[i].style.display = "flex";
break;
case "completed":
if (todos[i].classList.contains('completedItem')) {
todos[i].style.display = "flex";
} else {
todos[i].style.display = "none";
}
break;

case "uncompleted":
if (!todos[i].classList.contains('completedItem')) {
todos[i].style.display = "flex";
} else {
todos[i].style.display = "none";
}
break;
}
}
} 

您可以使用ajax作为一个选项来发送请求,以将数据保存在数据库中,并让记录填充列表。语法有点简单:

var data = ($("#YOUR_HTML_FORM_ID").serialize());
$.ajax({
url: 'YOUR_API_ROUTE',
data: data,
processData: false,
type: 'POST',
success: function ( data ) {
// All good here, do something like show a success message
},
error: function (data) {
data = JSON.parse(data.responseText);
// something went wrong
}
});