Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
14
respostas

Erro no Console

Pessoal, na hora que clico no botão para trocar a frase aparecem esses erros no console:

Uncaught TypeError: Cannot read property 'length' of undefined at trocaFraseAleatoria (frase.js:9) at HTMLAnchorElement.fraseAleatoria (frase.js:4) at HTMLAnchorElement.dispatch (jquery.js:5110) at HTMLAnchorElement.elemData.handle (jquery.js:4918)

meu codigo está igualzinho o do exercicio...

14 respostas

Fala Augusto!

Pelo que li no erro e na aula temos o código:


function trocaFraseAleatoria(data) {
    var frase = $(".frase");
    var numeroAleatorio = Math.floor(Math.random() * data.length);

    frase.text(data[numeroAleatorio].texto);
}

Então o erro acredito estar dando em data.length, quando você chama a função você está passando algum parâmetro?

Coloque o código aqui ou em algum CodePen!

$("#botao-frase").click(fraseAleatoria);

function fraseAleatoria(){
    $.get("http://localhost:3000/frases", trocaFraseAleatoria());
}

function trocaFraseAleatoria(data){
    var frase = $(".frase");
    var numeroAleatorio = Math.floor(Math.random() * data.length);

    frase.text(data[numeroAleatorio].texto);
    atualizaTamanhoFrase();
    atualizaTempoInicial(data[numeroAleatorio].tempo);
}

esse é o código Luiz.

Fala Augusto,

Quando você acessa "http://localhost:3000/frases" ele apresenta o JSON?

Na verdade não, ele aparece um texto apenas escrito assim:

[{"_id":0,"texto":"Alura, Cursos online de tecnologia que reinventam sua carreira.","tempo":15},{"_id":1,"texto":"Debuggers não consertam erros, apenas os exibem em slow motion.","tempo":8},{"_id":2,"texto":"Caelum, Ensino e Inovação.","tempo":5},{"_id":3,"texto":"Existem duas tarefas difíceis na Ciência da Computação: invalidação de cache e nomear as coisas.","tempo":15},{"_id":4,"texto":"Ciência da computação é tão sobre computadores quanto astronomia é sobre telescópios.","tempo":15},{"_id":5,"texto":"Na minha máquina funciona.","tempo":5},{"_id":6,"texto":"Hardware é o que você chuta, software é o que você xinga.","tempo":12},{"_id":7,"texto":"Software em funcionamento mais que documentação abrangente.","tempo":10},{"_id":8,"texto":"Iterar é humano, recursão é divino.","tempo":7},{"_id":9,"texto":"Existem três jeitos de desenvolver software. O jeito certo, o jeito errado e o meu jeito, que é igual o jeito errado só que mais rápido.","tempo":20}]

deste jeito. Não aparece o JSON todo arrumado parecendo um array

Bom Luiz, baixei um plugin do chrome, o JSONView e ele ficou todo organizado igual o do video aula, porém o erro ainda continua...

Fala Augusto,

Esse texto aí é o JSON mesmo, mas em formato texto, a minha dúvida era se estava acessando, e está, então o erro é outro.

Coloca um breakpoint na linha var frase = $(".frase"); e vê o que o que tem na variável data, fiz um teste aqui e seguindo a aula trouxe os dados corretamente.

Apareceu isso Luiz:

[p.frase.center, prevObject: jQuery.fn.init(1)] 0 : p.frase.center length : 1 prevObject : [document] proto : Object(0)

Acho que não apareceu aqui todo o erro.

[p.frase.center, prevObject: jQuery.fn.init(1)]

apareceu essa linha. Daí eu abro ela e aparece isso:

0: p.frase.center length:1 prevObject:[document] _proto__:Object(0)

Beleza, essa é a frase né?

Mas o que vem no objeto DATA?

O erro está dando em var numeroAleatorio = Math.floor(Math.random() * data.length); provavelmente o data está vindo vazio.

Se estiver falando que é undefined está com algum problema no get

esse é o problema, o codigo ta igual...

O objeto DATA ta dando undefined...

solução!

Consegui Luiz. O erro estava aqui:

function fraseAleatoria(){
    $.get("http://localhost:3000/frases", trocaFraseAleatoria);
}

No exercicio pede pra colocar o ( ) depois do trocaFraseAleatoria, mas na verdade nao tem.. baixei o arquivo na proxima aula e estava sem o ( ).

Obrigado pela ajuda LUIZ

Opa!

Massa!

Abraços!