9
respostas

Refazer um requerimento AJAX

E ai pessoal, tudo tranquilo?

Fiz um requerimento que me devolve um Quote e um Autor, porém quero saber como eu faço para receber outro Quote/Autor quando o Quote possuir mais de 200 caracteres.

Por enquanto ele está assim:

function getApi(url){
   var xhr = new XMLHttpRequest(); 
   xhr.open("GET", url); 
   xhr.send();
   xhr.addEventListener("load", function(){
    objQuote = JSON.parse(xhr.responseText);
    qtChar = objQuote.quote.split("").length;  // Quantidade de caracteres no quote
    newQuote(objQuote.quote,objQuote.author); // Funcao para novo Quote
}); 
}

Tentei algumas vezes mas em todas eu cai em um loop que dava crash, então deixei o orgulho de lado e vim aqui.

9 respostas

Você pode colocar uma condição para chamar o "newQuote", oque dar a entender e que quando você chama "newQuote" ele busca outro quote. Não é isso? estão colocando a condição antes de chamá-lo já resolveria a questão do lupe, faça isso:

if(objQuote.quote.length > 200)
{
    newQuote(objQuote.quote,objQuote.author);
}

então só entra quando quote estiver mais de 200 caracteres .

espero ter ajudado :).

Acontece que o newQuote pega somente o quote ja do api então chamar a funçao de novo nao resolveria. Acabei nao botando o link, mas é um link que gera toda vez que atualizado um novo quote:

https://talaikis.com/api/quotes/random

Acabei deixando um pouco fora de entendimento ahaha desculpe.

Resumindo, getApi pega o objeto e o new quote pega o quote dentro do objeto .

Toda vez que newQuote pega o objeto ele chama o getApi de novo é isso?

O newQuote apenas pega o objQuote.quote e objQuote.author que foram pegos pelo getApi.

Se eu entendi bem você pode fazer isso:

function getApi(url){
   var xhr = new XMLHttpRequest(); 
   xhr.open("GET", url); 
   xhr.send();
   xhr.addEventListener("load", function(){
    objQuote = JSON.parse(xhr.responseText);
    qtChar = objQuote.quote.split("").length;  // Quantidade de caracteres no quote
    newQuote(objQuote.quote,objQuote.author); // Funcao para novo Quote
    if(objQuote.quote.length > 200)
    {
         getApi('https://talaikis.com/api/quotes/random');
    }
  }); 
}

Eu entendi bem ou não ? :)

Bem, acabou que eu recorri ao ajax, não só o fiz como o obj utilizado já é totalmente carregado no inicio da pagina, com um loader para espera.

Acabou sendo esse o código usado

$.get(url, showCards);

function showCards(data){
  var objQuote = data;
  $(".loader").fadeOut(function(){
    $(".all-cards").fadeIn();
});

Obrigado pela ajuda :)

Que bom que você encontro a uma solução, contudo espero ter de alguma forma ajudado. Bons estudos!