94 votes

erreur de syntaxe : jeton inattendu <

J'ai essayé plusieurs choses et il n'y a aucun moyen, cette erreur apparaît toujours. J'ai essayé d'utiliser une seule option pour voir si elle passait, j'ai changé l'appel de jquery, mais non.

J'ai cherché à différents endroits sur Internet au sujet de cette erreur, mais je n'ai pas pu résoudre ou comprendre pourquoi elle se produit. Sur mon pc en utilisant EasyPHP fonctionne parfaitement, mais quand je mets en ligne ne fonctionne pas.

Erreur de syntaxe : jeton inattendu <

Voici mon code :

$(function(){
$('#salvar').click(function(){
    var key = 'salvar';
    var title = $('#title').val();
    var opcao1 = $('#opcao1').val();
    var opcao2 = $('#opcao2').val();
    var opcao3 = $('#opcao3').val();
    var opcao4 = $('#opcao4').val();
    var opcao5 = $('#opcao5').val();
    var opcao6 = $('#opcao6').val();

    if(title.length > 0){
        if(opcao2.length > 0){
            $('#resposta').removeClass().html('Salvando a enquete...<br clear="all"><br><img src="images/switch-loading.gif" />');
            $.ajax({
            type : 'POST',
            url : 'funcoes/enquete_adm.php',
            dataType : 'json',
            data: {key:key,title:title,opcao1:opcao1,opcao2:opcao2,opcao3:opcao3,opcao4:opcao4,opcao5:opcao5,opcao6:opcao6},
            success : function(data){
                if(data.sql == 'ok'){
                        $('#resposta').addClass('success-box').html('Enquete Salva!').fadeIn(1000);
                        $('#control').fadeOut();
                    }else if(data.sql == 'error'){
                        $('#resposta').addClass('info-box').html('Ops, aconteceu um erro. Por favor, tente novamente').fadeIn(1000);
                    }
                },
            error: function (XMLHttpRequest, textStatus, errorThrown) {    
                alert("XMLHttpRequest " + XMLHttpRequest[0]);alert(" errorThrown: " + errorThrown);alert( " textstatus : " + textStatus);    
            }
            });
        }else{
            $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções');
        };
    }else{
        $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete');
    };
    return false;

});
}); // End

126voto

amenadiel Points 5675

Cela se produit généralement lorsque vous incluez ou enregistrez dans un fichier qui n'existe pas. Le serveur renverra un message ordinaire au format html "404 Not Found", accompagné de la mention

'<html></html>' 

tags. Ce premier chevron < n'est pas un js valide ni un json valide, il déclenche donc un token inattendu.

Et si vous essayez de changer 'funcoes/enquete_adm.php' en une url absolue, juste pour être sûr ?

EDIT (plusieurs années plus tard)

La cause profonde ne provient pas toujours des erreurs 404. Parfois, vous pouvez faire une demande à une API et recevoir des erreurs au format HTML. Je suis tombé sur quelques cas où le point de terminaison de l'API aurait dû retourner

{
   error: "you must be authenticated to make this request"
}

Avec l'en-tête 401. Et à la place, j'ai obtenu

<html>You must be authenticated to make this request</html>

Avec l'en-tête 200.

Étant donné que l'en-tête est 200, vous ne pouvez pas savoir à l'avance que la requête a échoué, et vous êtes coincé pour essayer et JSON.parse la réponse pour vérifier si elle est valide.

14voto

happyhuman Points 294

Vous n'avez pas besoin ; (points-virgules) :

Exemple ici :

 }else{
        $('#resposta').addClass('warning-box').html('É necessário no mínimo duas opções');
    };

La queue ; après } est incorrecte.

Un autre exemple ici :

}else{
    $('#resposta').addClass('warning-box').html('Coloque a pergunta da enquete');
};

8voto

StylusEater Points 3044

Je soupçonne que vous obtenez un encodage text/html en réponse à votre demande, donc je pense que le problème est :

dataType : 'json',

essayez de le changer en

dataType : 'html',

De http://api.jquery.com/jQuery.get/ :

dataType Type : Chaîne de caractères Le type de données attendu du serveur. Valeur par défaut : Devine intelligente (xml, json, script, ou html).

6voto

janaspage Points 1216

L'erreur SyntaxError: Unexpected token < signifie probablement que le point de terminaison de l'API n'a pas retourné JSON dans son corps de document, par exemple à cause d'un 404.

Dans ce cas, il s'attend à trouver une { (début du JSON) ; à la place, il trouve un fichier < (début d'un élément d'intitulé).

Réponse réussie :

<html>
  <head></head>
  <body>
    {"foo": "bar", "baz": "qux"}
  </body>
</html>

Réponse non trouvée :

<html>
  <head></head>
  <body>
    <h1>Not Found</h1>
    <p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
  </body>
</html>

Essayez de visiter l'URL du point d'accès aux données dans votre navigateur pour voir ce qui est renvoyé.

3voto

Chloe Points 67

J'ai eu un problème similaire, et mon problème était que j'envoyais du javascript pour afficher les messages de la console.

Même lorsque j'ai regardé le fichier dans mon navigateur (et non dans l'application), il s'est affiché exactement comme je l'attendais (par exemple, les balises supplémentaires n'apparaissaient pas), mais elles apparaissaient dans la sortie html/texte et essayaient d'être analysées.

J'espère que cela aidera quelqu'un !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X