Consumindo api com javascript puro
[Concluído]
ola professor Carlos, estou tentando para fins didatico, consumir a Api com javascript puro, porem qdo utilizo o paginate na Api do laravel tenho erro: Uncaught (in promise) TypeError: itens.forEach is not a function
Minha Api:
https://produtos.acessohost.com.br/api/products
Url que esta consumindo
https://acessohost.com.br/testeApi/
Meu script para consumir em js:
async function list(){
const url = "https://produtos.acessohost.com.br/api/products";
const params = {
method : 'GET',
mode: 'cors',
cache: 'default'
};
const response = await fetch(url, params);
const data = await response.json();
console.log("Resultado", data);
let itens = data;
itens.forEach(item =>{ let lista = document.querySelector(".lista"); lista.innerHTML += `
- Name: ${item.name}
- URL: ${item.description}
- URL: ${item.image}
`;
});
}
list();
**IMPORTANTE - qdo retiro a paginação da API, lista normalmente os produtos
Olá, Renato!
Como vai?
Tem o código no GitHub? Fica mais fácil a visualização;
https://github.com/renatoribeiromachado/apiProdutosLaravel
O código JS está onde mesmo?
E qual é o erro mesmo, quando pagina?
Codigo JS
https://acessohost.com.br/testeApi/
Erro:
Uncaught (in promise) TypeError: itens.forEach is not a function
Se tiver um print, com os detalhes do erro fica mais fácil para eu te ajudar como você merece.
https://uploaddeimagens.com.br/
professor Carlos
se vc entrar nesse link e ir no console consegue ver
https://acessohost.com.br/testeApi/
erro:
Resultado Objectcurrent_page: 1data: (3) [{…}, {…}, {…}]first_page_url: "http://produtos.acessohost.com.br/api/products?page=1"from: 1last_page: 1last_page_url: "http://produtos.acessohost.com.br/api/products?page=1"links: (3) [{…}, {…}, {…}]next_page_url: nullpath: "http://produtos.acessohost.com.br/api/products"per_page: 10prev_page_url: nullto: 3total: 3[[Prototype]]: Object
(index):31 Uncaught (in promise) TypeError: itens.forEach is not a function
at list ((index):31:23)
Não achei o código JS no GitHub, mas deu para entender melhor o erro com o debug que você enviou.
Se observar o retorno da API, os dados em sí são retornados em "data", logo, você tem o "data" da response, e o "data" dos dados.
--
Para conseguir entender melhor, faça debugs:
console.log(data);
console.log(data.data);
professor Carlos esse é o js:
async function list(){ const url = "https://produtos.acessohost.com.br/api/products"; const params = { method : 'GET', mode: 'cors', cache: 'default' }; const response = await fetch(url, params); const data = await response.json(); console.log("Resultado", data); let itens = data; //let itens = data.results; //pokemon esta dentro da varivel result //tanto faz map ou foreach, no entanto o map é só pra objetos o que é o caso aqui itens.forEach(item =>{ let lista = document.querySelector(".lista"); lista.innerHTML += `
- Name: ${item.name}
- URL: ${item.description}
- URL: ${item.image}
`; }); } list();
Não fez sentido pra mim sua resposta, desculpa, pois o erro só ocorre qdo utilizo paginate na api, qdo uso get, funciona sem problemas
Fica calmo, que vou te ajudar. Tá bom? :-)
--
Quando usa API resource ou paginate, o response da api é diferente, por isso o erro no seu loop;
--
Qual foi o log de retorno?
console.log(data); (print por favor)
Professor Carlos, consegui aqui, estava errado meu escript:
errado -> let itens = data;
correto -> let itens = data.data;
como vc disse "dados em sí são retornados em "data"", me atentei a isso e deu certo, obrigado pela atenção
Show de bola amigo, parabéns!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!