使用 vanilla javascript 和 dom 操作动态显示来自 axios get 请求的值
dynamically display value from an axios get request using vanilla javascript and dom manipulation
我认为下面的代码可以做到,但它给了我一个“TypeError:无法读取未定义的 属性 '0'”。如何让我的数据显示?我还是新手javascript,请保持简单易懂。
// Get todos Function
function getToDos() {
// Get request
axios
.get("//https:www.apiCall")
.then((res) => {
// log response
console.log(res);
// user creates todos variable
if (res.length === 0) {
console.log("No to-dos addded");
}
const todos = res.data;
displayToDos(todos);
})
.catch((err) => {
console.log(err);
});
}
// display todos function
function displayToDos(todos) {
if (todos.length === 0) {
// Create ul element
const ul = document.createElement("ul");
}
let li = document.createElement("li");
li.setAttribute("class", "toDoItem");
for (let i = 0; i < todos.length; i++) {
// adds text to li element
let textContent = document.createTextNode("Title: " + todos[i].title);
// Append content to li
document.li[i].appendChild("textContent");
document.ul.appendChild(li[i]);
document.body.appendChild(ul);
}
}
getToDos();
您的 displayToDos 方法中有很多错误。它应该看起来像这样:
function displayToDos(todos) {
// You have to create an ul element, not only when there are 0 todos.
const ul = document.createElement("ul");
for (let i = 0; i < todos.length; i++) {
// You need to create an li for each todo
let li = document.createElement("li");
li.setAttribute("class", "toDoItem");
let textContent = document.createTextNode("Title: " + todos[i].title);
li.appendChild(textContent);
// And add it to the ul
ul.appendChild(li);
}
// Finally, add the ul to your html page.
document.body.appendChild(ul);
}
我做了一些重构,以便它在堆栈溢出代码段中工作。
通常我会使用 async await 而不是 promises 但无法让它们在代码片段中工作。
如果您想了解更多详细信息,请提出。
function fetchToDos() {
return new Promise((resolve)=>{
resolve({
length: 8,
data: [
{title: 'todo 1'},
{title: 'todo 2'},
{title: 'todo 3'},
{title: 'todo 4'},
{title: 'todo 5'},
{title: 'todo 6'},
{title: 'todo 7'},
{title: 'todo 8'},
]
});
});
};
function getToDos() {
return new Promise((resolve, reject) => {
fetchToDos().then(res => {
if(!res.length){
console.log('No to-dos addded')
}
resolve(res.data);
}).catch(reject);
});
};
function displayToDos(todos) {
const ul = document.createElement('ul');
todos.forEach( ({title}) => {
const li = document.createElement('li');
li.classList.add('toDoItem');
li.innerText = `Title: ${title}`;
ul.appendChild(li);
});
document.body.querySelector('#root').appendChild(ul);
}
getToDos()
.then( displayToDos )
.catch( console.error );
<div id="root">
</div>
我认为下面的代码可以做到,但它给了我一个“TypeError:无法读取未定义的 属性 '0'”。如何让我的数据显示?我还是新手javascript,请保持简单易懂。
// Get todos Function
function getToDos() {
// Get request
axios
.get("//https:www.apiCall")
.then((res) => {
// log response
console.log(res);
// user creates todos variable
if (res.length === 0) {
console.log("No to-dos addded");
}
const todos = res.data;
displayToDos(todos);
})
.catch((err) => {
console.log(err);
});
}
// display todos function
function displayToDos(todos) {
if (todos.length === 0) {
// Create ul element
const ul = document.createElement("ul");
}
let li = document.createElement("li");
li.setAttribute("class", "toDoItem");
for (let i = 0; i < todos.length; i++) {
// adds text to li element
let textContent = document.createTextNode("Title: " + todos[i].title);
// Append content to li
document.li[i].appendChild("textContent");
document.ul.appendChild(li[i]);
document.body.appendChild(ul);
}
}
getToDos();
您的 displayToDos 方法中有很多错误。它应该看起来像这样:
function displayToDos(todos) {
// You have to create an ul element, not only when there are 0 todos.
const ul = document.createElement("ul");
for (let i = 0; i < todos.length; i++) {
// You need to create an li for each todo
let li = document.createElement("li");
li.setAttribute("class", "toDoItem");
let textContent = document.createTextNode("Title: " + todos[i].title);
li.appendChild(textContent);
// And add it to the ul
ul.appendChild(li);
}
// Finally, add the ul to your html page.
document.body.appendChild(ul);
}
我做了一些重构,以便它在堆栈溢出代码段中工作。 通常我会使用 async await 而不是 promises 但无法让它们在代码片段中工作。
如果您想了解更多详细信息,请提出。
function fetchToDos() {
return new Promise((resolve)=>{
resolve({
length: 8,
data: [
{title: 'todo 1'},
{title: 'todo 2'},
{title: 'todo 3'},
{title: 'todo 4'},
{title: 'todo 5'},
{title: 'todo 6'},
{title: 'todo 7'},
{title: 'todo 8'},
]
});
});
};
function getToDos() {
return new Promise((resolve, reject) => {
fetchToDos().then(res => {
if(!res.length){
console.log('No to-dos addded')
}
resolve(res.data);
}).catch(reject);
});
};
function displayToDos(todos) {
const ul = document.createElement('ul');
todos.forEach( ({title}) => {
const li = document.createElement('li');
li.classList.add('toDoItem');
li.innerText = `Title: ${title}`;
ul.appendChild(li);
});
document.body.querySelector('#root').appendChild(ul);
}
getToDos()
.then( displayToDos )
.catch( console.error );
<div id="root">
</div>