Andre, o ponto e vírgula indica o fim de uma instrução.
Por isso quando o interpretador de JS do seu navegador ler este código:
$.get("http://localhost:3000/frases",dados,trocaFrase);
.fail(function(){ // resto...
Na primeira linha ele executa a instrução normalmente, como existe um ponto e vírgula esta instrução termina.
Na segunda linha é uma instrução a parte (indpendente da execução da função anterior). O interpretador começa a ler e pensa: ".fail
que ## é essa? eu não estava esperando por isso". Não existe uma variável .fail
definida naquele escopo nem nos escopos acima, nem seria possível pois não é possível declarar uma variável que comece com ponto. Então o ponto é um Unexpected token.
Bom, então de onde o fail
deveria vir?
Do objeto retornado pela função get
do jQuery.
Quando você faz $.get("http://localhost:3000/frases",dados,trocaFrase)
essa função te retorna um objeto, como informado na documentação do jQuery este objeto é um jqXHR
. Um jqXHR
é um superset do objeto XMLHTTPRequest
, este nativo da linguagem JavaScript.
Um objeto jqXHR
possui o método fail
. Você poderia utilizá-lo assim:
var jqXHR = $.get('http://localhost:3000/frases', dados, trocaFrase);
jqXHR.fail(function () {
$('#erro').toggle();
setTimeOut(function () {
$('#erro').toggle();
}, 1500);
})
jqXHR.always(function () {
$('#spinner').toggle();
});
Mas justamente como o get
retorna um jqXHR
e um jqXHR
possui o método fail
, você pode encadear a chamada:
$.get(url, dados, fn).fail()
Claro, pra ficar mais legível você pode quebrar a linha:
$.get(url, dados, fn)
.fail()
Mas se colocar um ponto e vírgula no final do get
o interpretador JS não vai entender que você queria encadear a chamada:
$.get(url, dados, fn); // Ok, fiz o get, retornei um jqXHR (apesar de não estar sendo guardado em uma variável)
.fail() // de onde esse cara apareceu? Não existe nenhum .fail, não existe variável ou nome de função que comece com ponto, eu não esperava esse ponto