Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Uncaught SyntaxError: Unexpected token - Socorro!

Esta dando este erro de sintaxe, mas por Deus... Procurei, procurei e não consegui achar o erro. Alguém pode ajudar? O console esta apontando que o erro esta apontando que o erro esta na linha da função - .fail(function), mas realmente não consigo identificar.


function buscaFrase() {
  $("#spinner").toggle();
  var fraseId = $("#frase-id").val();
  console.log("O id da minha frase e: "+ fraseId);
  var dados = {id: fraseId};
  $.get("http://localhost:3000/frases",dados,trocaFrase);
  .fail(function(){
    $("#erro").toggle();
    setTimeOut(function() {
      $("#erro").toggle();
    }, 1500);
  })
    .always(function(){
       $("#spinner").toggle();
    });
};

function trocaFrase(data) {

  console.log(data);
};

```

5 respostas

Olá,

Há um ponto e vírgula no final da chamada de get: $.get("http://localhost:3000/frases",dados,trocaFrase);

Remova-o.

Fala ai André, acredito que fazendo a modificação sugerido pelo Pedro seu problema irá se resolver, foi o único problema que também identifiquei.

Abraços

solução!

Muuuito obrigado! So pra saber... o fato de ter colocado ; no final da requisição, estava impedindo ela de acontecer? Achei que por fechar o parênteses era obrigatório colocar o pinto e virgula.

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

Obrigado pela ajuda e pela explicação, foi muito bom entender um pouco mais.