web-dev-qa-db-fra.com

erreur de syntaxe: jeton inattendu <

J'ai essayé beaucoup de choses et il n'y a aucun moyen, apparaît toujours cette erreur J'ai essayé d'utiliser une seule option pour voir si passé, changé l'appel de jQuery, mais pas.

J'ai cherché cette erreur à différents endroits sur Internet, mais je ne pouvais ni comprendre ni comprendre pourquoi cela se produisait. EasyPHP fonctionne parfaitement sur mon ordinateur, mais ne fonctionne pas lorsque je mets en ligne.

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
64
Geovane Krüger

Cela se produit généralement lorsque vous incluez ou postez dans un fichier qui n'existe pas. Le serveur renverra un "404 Introuvable" formaté au format HTML et joint à

'<html></html>' 

mots clés. Ce premier chevron <n'est ni valide js ni valide json, il déclenche donc un jeton 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 fondamentale ne provient peut-être pas toujours des erreurs 404. Parfois, vous pouvez demander à une API et recevoir des erreurs au format HTML. Je suis tombé sur deux cas dans lesquels le noeud final de l'API aurait dû être renvoyé.

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

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

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

Avec en-tête 200.

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

107
amenadiel

Vous avez inutile ; (points-virgules):

Exemple ici:

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

Le ; final après } est incorrect.

n autre exemple ici:

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

Je suppose que vous obtenez un encodage texte/html en réponse à votre demande, je pense donc que le problème est le suivant:

dataType : 'json',

essayez de le changer pour

dataType : 'html',

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

dataType Type: String Le type de données attendu du serveur. Valeur par défaut: Intelligent Guess (xml, json, script ou html).

8
StylusEater

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

Dans ce cas, il s'attend à trouver un { (début de JSON); à la place, il trouve un < (début d'un élément d'en-tête).

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 de terminaison de données dans votre navigateur pour voir ce qui est renvoyé.

5
jtheletter

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 (pas à travers l’application), il a montré exactement ce que j’attendais (par exemple, les balises supplémentaires ne sont pas affichées), mais il y en avait dans la sortie HTML/texte et essayaient analysé.

J'espère que ça aide quelqu'un!

2
Chloe

Je soupçonne qu'un de vos scripts inclut un RL de la carte source . (Minified jQuery contient une référence à une carte source, par exemple.)

Lorsque vous ouvrez les outils de développement Chrome, Chrome essaiera d'extraire la carte source de l'URL pour faciliter le débogage. Toutefois, la carte source n’existe pas réellement sur votre serveur, mais vous recevez plutôt une page 404 standard contenant du code HTML.

2
user2428118

Supprimer cette ligne de mon code a résolu mon problème.

header("Content-Type: application/json; charset=UTF-8"); 
1
Abdulla

Lors de la publication via ajax, il est toujours judicieux de commencer par envoyer normalement pour s'assurer que le fichier appelé renvoie toujours des données valides (json) et qu'aucune erreur ne soit associée aux balises html ou autres.

<form action="path/to/file.php" id="ajaxformx">

En ajoutant x à la valeur id, jquery ne la traitera pas.

Une fois que vous êtes sûr que tout va bien, supprimez la x de id="ajaxform" et videz la valeur de l'attribut action.

Voici comment j'ai corrigé la même erreur il y a quelques minutes :)

1
Onimusha

J'avais aussi syntax error: unexpected token < en postant un formulaire via ajax. Ensuite, j'ai utilisé curl pour voir ce qu'il retournait:

curl -X POST --data "firstName=a&lastName=a&[email protected]&pass=aaaa&mobile=12345678901&nID=123456789123456789&age=22&prof=xfd" http://handymama.co/CustomerRegistration.php

J'ai eu quelque chose comme ça comme réponse:

<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>3</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>4</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /home/handymama/public_html/CustomerRegistration.php:1) in <b>/home/handymama/public_html/CustomerRegistration.php</b> on line <b>8</b><br />

Donc, tout ce que je devais faire était de changer le niveau de journalisation en erreurs seulement plutôt qu'en avertissement.

error_reporting(E_ERROR);
1
sadaf2605

j'ai vérifié tous les chemins JS inclus

Exemple Change this

<script src="js/bootstrap.min.js" type="text/javascript"></script>

À

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" type="text/javascript"></script>
1
omar nazzal

Cette erreur peut également provenir d'un appel JSON AJAX à un script PHP dont le code contient une erreur. Les serveurs sont souvent configurés pour renvoyer PHP informations d'erreur formatées avec un balisage HTML. Cette réponse est interprétée comme un code JSON non valide, générant l'erreur "jeton inattendu <" AJAX.

Pour afficher l'erreur PHP à l'aide de Chrome, accédez au panneau Réseau de l'inspecteur Web, cliquez sur le fichier PHP répertorié à gauche, puis sur l'onglet Réponse.

1
eirikarvey

Je vais juste jeter ça ici puisque j'ai rencontré la même erreur mais pour des raisons TRÈS différentes.

Je sers via node/express/jade et j'avais transféré un ancien fichier jade. Une des lignes était de ne pas bouger quand Typekit a échoué:

script(type='text/javascript')
  try{Typekit.load();}catch(e){}

Cela semblait assez anodin, mais je me suis finalement rendu compte que pour les blocs de script jade où vous ajoutez du contenu, vous avez besoin d'un .:

script(type='text/javascript').
  try{Typekit.load();}catch(e){}

Simple mais difficile.

0
orbiteleven

assurez-vous de ne pas inclure le code jQuery entre les

<script> </ script>

Si c'est le cas, supprimez-le et le code fonctionnera correctement. Cela a fonctionné dans mon cas.

0
Gopal Sharma

Ignorer les paramètres passés comme faux dans les fonctions de script Java

Ex:

function getCities(stateId,locationId=false){    

    // Avoid writting locationId= false kind of statements
   /*your code comes here*/

 }

Évitez d’écrire locationId = faux type d’énoncé, car cela donnerait l’erreur dans chrome et IE

0
Nitin

Cela m'est arrivé avec une page chargée via un iframe. La page iframe src avait une référence de script 404. Évidemment, je ne pouvais pas trouver la référence du script dans la page parent, alors il m'a fallu un certain temps pour trouver le coupable.

0
murraybiscuit