232 votes

Untaught SyntaxError: Jeton inattendu:

Je lance un appel AJAX dans mon script MooTools, cela fonctionne bien dans Firefox, mais dans Chrome, je reçois une erreur Uncaught SyntaxError: Unexpected token : , je ne peux pas en déterminer la raison. Commenter le code pour déterminer où le mauvais code ne cède rien, je pense que cela peut être un problème avec le JSON renvoyé. Vérification dans la console Je vois le JSON retourné est la suivante:

 {"votes":47,"totalvotes":90}
 

Je ne vois aucun problème avec cela, pourquoi cette erreur se produirait-elle?

 vote.each(function(e){
  e.set('send', {
    onRequest : function(){
      spinner.show();
    },
    onComplete : function(){
      spinner.hide();
    },
    onSuccess : function(resp){
      var j = JSON.decode(resp);
      if (!j) return false;
      var restaurant = e.getParent('.restaurant');
      restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
      $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
      buildRestaurantGraphs();
    }
  });

  e.addEvent('submit', function(e){
    e.stop();
    this.send();
  });
});
 

85voto

Edward Abrams Points 459

Juste un FYI pour les personnes qui pourraient avoir le même problème - je devais juste faire en sorte que mon serveur renvoie le JSON en tant qu'application / json et que le gestionnaire par défaut de jQuery fonctionnait correctement.

42voto

Grim... Points 5973

Cela ne m'est arrivé, et la raison en était aucune des raisons ci-dessus. J'ai été en utilisant jQuery commande getJSON et l'ajout d' callback=? d'utilisation JSONP (que j'ai besoin d'aller cross-domain), et en retournant le code JSON {"foo":"bar"} et l'obtention de l'erreur.

C'est parce que je devrais avoir inclus le rappel de données, quelque chose comme jQuery17209314005577471107_1335958194322({"foo":"bar"})

Voici le code PHP que j'ai utilisé pour réaliser ce qui se dégrade si JSON (sans rappel) est utilisé:

$ret['foo'] = "bar";
finish();

function finish() {
    header("content-type:application/json");
    if ($_GET['callback']) {
        print $_GET['callback']."(";
    }
    print json_encode($GLOBALS['ret']);
    if ($_GET['callback']) {
        print ")";
    }
    exit; 
}

J'espère que ça va aider quelqu'un dans le futur.

19voto

trobrock Points 17439

Je viens de résoudre le problème. Il y avait quelque chose qui posait problème avec un appel de requête standard, c'est donc le code que j'ai utilisé à la place:

 vote.each(function(element){                
  element.addEvent('submit', function(e){
    e.stop();
    new Request.JSON({
      url : e.target.action, 
      onRequest : function(){
        spinner.show();
      },
      onComplete : function(){
        spinner.hide();
      },
      onSuccess : function(resp){
        var j = resp;
        if (!j) return false;
        var restaurant = element.getParent('.restaurant');
        restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
        $$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
        buildRestaurantGraphs();
      }
    }).send(this);
  });
});
 

Si quelqu'un sait pourquoi l'objet de requête standard me posait des problèmes, j'aimerais savoir.

10voto

Keven Points 761

Je pensais que je voudrais ajouter mon problème et la résolution de la liste.

J'ai été faire: Uncaught SyntaxError: Unexpected token < et l'erreur a été pointant vers cette ligne dans mon ajax succès déclaration:

var total = $.parseJSON(response);

J'ai appris plus tard que, en plus des résultats json, HTML a été envoyé avec la réponse parce que j'avais une erreur dans mon PHP. Lorsque vous obtenez un message d'erreur de PHP, vous pouvez le configurer pour vous avertir avec d'énormes orange tables et les tables ont été ce qui a été jeté au format JSON.

J'ai trouvé que par faire juste un console.log(response) afin de voir ce qui a effectivement été envoyé. Si c'est un problème avec les données JSON, juste essayer pour voir si vous pouvez faire une console.journal ou une autre déclaration qui va vous permettre de voir ce qui est envoyé et ce qui est reçu.

1voto

jakob Points 2512

J'ai eu le même problème et il s'est avéré que le Json retourné du serveur n'était pas valide Json-P. Si vous n'utilisez pas l'appel comme un appel crossdomain, utilisez Json ordinaire.

http://json-p.org/validator.html

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