it-swarm.com.de

Nicht abgeholter SyntaxError: Unerwartetes Token:

Ich führe in meinem MooTools-Skript einen AJAX - Aufruf aus. Dies funktioniert zwar in Firefox, aber in Chrome erhalte ich einen Uncaught SyntaxError: Unexpected token :-Fehler. Ich kann nicht ermitteln, warum. Wenn Sie den Code auskommentieren, um zu ermitteln, wo der fehlerhafte Code ist, ergibt dies nichts. Ich denke, es könnte ein Problem sein, wenn der JSON zurückgegeben wird. Beim Überprüfen der Konsole sehe ich, dass der JSON zurückgegeben wurde:

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

Ich sehe keine Probleme damit, warum sollte dieser Fehler auftreten?

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();
  });
});
161
trobrock

Ich habe das Problem gerade gelöst. Es gab etwas, das Probleme mit einem Standardanforderungsaufruf verursachte, daher wurde hier der Code verwendet,

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);
  });
});

Wenn jemand weiß, warum das Standardanforderungsobjekt Probleme bereitete, würde ich das gerne erfahren.

16
trobrock

Rote Fehler sehen 

Nicht abgeholter SyntaxError: Unerwartetes Token <

in Ihrem Chrome-Entwicklerkonsolen-Tab befindet sich häufig ein Hinweis auf 301-Weiterleitungen , die durch eine seltsame Regel in Ihrer .htaccess-Datei verursacht werden könnten. 

Was Sie tatsächlich sehen, ist die Reaktion Ihres Browsers auf die unerwartete obere Zeile <!DOCTYPE html> vom Server.

79
andy magoon

Nur eine FYI für Leute, die das gleiche Problem haben könnten - ich musste meinen Server dazu bringen, den JSON als application/json zurückzuschicken, und der standardmäßige jQuery-Handler funktionierte gut.

78
Edward Abrams

Dies ist mir gerade passiert und der Grund war keiner der oben genannten Gründe. Ich habe den jQuery-Befehl getJSON verwendet und callback=? hinzugefügt, um JSONP zu verwenden (da ich domänenübergreifend arbeiten musste), den JSON-Code {"foo":"bar"} zurückgegeben und den Fehler erhalten.

Dies liegt daran, dass ich die Rückrufdaten hätte enthalten sollen, etwa jQuery17209314005577471107_1335958194322({"foo":"bar"})

Hier ist der PHP Code, den ich dazu verwendet habe, der sich verschlechtert, wenn JSON (ohne Callback) verwendet wird:

$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; 
}

Hoffentlich hilft das jemandem in der Zukunft.

40
Grim...

Ich dachte, ich würde mein Problem und meine Lösung in die Liste aufnehmen.

Ich erhielt: Uncaught SyntaxError: Unexpected token < und der Fehler zeigte auf diese Zeile in meiner Ajax-Erfolgsaussage:

var total = $.parseJSON(response);

Später fand ich heraus, dass zusätzlich zu den Json-Ergebnissen HTML mit der Antwort gesendet wurde, da in meinem PHP ein Fehler aufgetreten war. Wenn Sie in PHP einen Fehler erhalten, können Sie ihn so einrichten, dass er Sie mit riesigen orangefarbenen Tabellen warnt.

Ich fand das heraus, indem ich einfach console.log(response) machte, um zu sehen, was tatsächlich gesendet wurde. Wenn es sich um ein Problem mit den JSON-Daten handelt, versuchen Sie einfach herauszufinden, ob Sie eine console.log oder eine andere Anweisung ausführen können, mit der Sie sehen können, was gesendet und empfangen wurde.

10
Keven

Wenn Sie Ihre JSON-Datei anfordern, gibt der Server den JavaScript-Code Content-Type (text/javascript) anstelle von JSON (application/json) zurück.

Nach MooTools docs :

Antworten mit dem Javascript-Inhaltstyp werden automatisch ausgewertet.

Im Ergebnis versucht MooTools, Ihre JSON als JavaScript auszuwerten, und wenn Sie versuchen, eine solche JSON auszuwerten:

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

als JavaScript behandelt der Parser { und } als Blockbereich anstelle von Objektnotation. Es ist das Gleiche wie das Auswerten des folgenden "Codes":

"votes":47,"totalvotes":90

Wie Sie sehen, ist : dort völlig unerwartet.

Die Lösung besteht darin, den richtigen Content-Type-Header für die JSON-Datei festzulegen. Wenn Sie es mit der Erweiterung .json speichern, sollte Ihr Server dies selbst tun.

Es klingt, als würde Ihre Antwort irgendwie ausgewertet. Dies ergibt den gleichen Fehler in Chrome:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

Dies liegt daran, dass die geschweiften Klammern '{...}' von Javascript als Codeblock und nicht wie erwartet von einem Objektliteral interpretiert werden.

Ich würde mir die JSON.decode () - Funktion ansehen und sehen, ob dort ein eval vorhanden ist.

Ähnliches Problem hier: Eval () = Unerwartetes Token: Fehler

3
Zectbumo

Ich hatte das gleiche Problem und es stellte sich heraus, dass der Json vom Server zurückkehrte. Wenn Sie den Anruf nicht als Crossdomain-Anruf verwenden, verwenden Sie den regulären Json.

1
jakob

Dies geschah, weil ich in meinem Express-Server eine Regel eingerichtet habe, um alle 404-Codes an /# plus zurückzuleiten, unabhängig von der ursprünglichen Anforderung. Zulassen, dass der eckige Router/js die Anforderung verarbeitet. Wenn es keine js-Route gibt, um diesen Pfad zu behandeln, wird eine Anforderung an /#/whatever an den Server gesendet. Dies ist lediglich eine Anforderung für /, der gesamten Webseite. 

Wenn ich zum Beispiel eine Anfrage für /correct/somejsfile.js machen wollte, aber ich vermisse es, /wrong/somejsfile.js einzugeben, wird die Anfrage an den Server gestellt. Da diese Position/Datei nicht vorhanden ist, antwortet der Server mit einem 302 location: /#/wrong/somejsfile.js. Der Browser folgt der Umleitung gerne und die gesamte Webseite wird zurückgegeben. Der Browser parst die Seite als js und Sie erhalten

Nicht abgeholter SyntaxError: Unerwartetes Token <

Um zu helfen, den fehlerhaften Pfad/die fragliche Anforderung zu finden, suchen Sie nach 302 Anforderungen.

Hoffe das hilft jemandem. 

1
Jerinaw

Das ist mir auch heute passiert. Ich habe EF verwendet und als Antwort auf einen AJAX - Aufruf eine Entität zurückgegeben. Die virtuellen Eigenschaften in meiner Entität verursachten einen zyklischen Abhängigkeitsfehler, der auf dem Server nicht erkannt wurde. Durch Hinzufügen des Attributs [ScriptIgnore] zu den virtuellen Eigenschaften wurde das Problem behoben.

Anstatt das ScriptIgnore-Attribut zu verwenden, ist es wahrscheinlich besser, nur ein DTO zurückzugeben.

1
Daryl

" Nicht abgefangener SyntaxError: Unerwarteter Token " Fehler, wenn Ihre Daten das falsche Json-Format zurückgeben. In einigen Fällen wissen Sie nicht, dass Sie das falsche Json-Format erhalten haben.
Bitte überprüfen Sie es mit alert (); Funktion 

onSuccess : function(resp){  
   alert(resp);  
}

ihre Nachricht sollte lauten: {"firstName": "John", "lastName": "Doe"}
und dann können Sie den Code unten verwenden

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

with out error " Nicht abgerufener SyntaxError: Unerwartetes Token "
Wenn Sie jedoch ein falsches Json-Format erhalten
Ex: 

... {"firstName": "John", "lastName": "Doe"}

oder 

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

damit Sie das falsche Json-Format erhalten haben, korrigieren Sie es bitte vor JSON.decode oder JSON.parse

1
Serip88

Für diejenigen, die dies in AngularJs 1.4.6 oder ähnlichem erlebten, bestand mein Problem darin, dass Angle meine Vorlage nicht fand, weil die Datei unter templateUrl (Pfad) nicht gefunden wurde. Ich musste nur einen erreichbaren Pfad angeben und das Problem ging weg.

0
lwdthe1

Für mich ging die Glühbirne an, als ich die Quelle auf der Seite im Chrome-Browser sah. Ich hatte eine zusätzliche Klammer in einer if-Anweisung. Sie sehen sofort den roten Kreis mit einem Kreuz in der fehlerhaften Linie. Dies ist eine wenig hilfreiche Fehlermeldung, da das Unerwartete Token "Unrecording Syntax Error: Unexpected" keinen Hinweis auf eine Zeilennummer enthält, wenn es zum ersten Mal in der Chrome-Konsole angezeigt wird.

0
JGFMK

Ich habe ein "SyntaxError: Unexpected token I" erhalten, als ich mit jQuery.getJSON() versuchte, einen Fließkommawert von Infinity zu deserialisieren, der als INF codiert ist.

0
Mark Cidade

In meinem Fall bin ich auf den gleichen Fehler gestoßen, als ich die Spring-MVC-Anwendung wegen falscher Zuordnung in meinem MVC-Controller ausgeführt habe

@RequestMapping(name="/private/updatestatus")

ich habe das obige Mapping in geändert 

 @RequestMapping("/private/updatestatus")

oder

 @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
0

Ich habe das falsch gemacht

   `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

Ich habe bereits die Variable fs initialisiert. Aber noch einmal habe ich var in die zweite Zeile eingefügt.

0
Jana

Wenn nichts sinnvoll ist, kann dieser Fehler auch durch den in HTML/Javascript eingebetteten Fehler PHP verursacht werden, beispielsweise den folgenden

<br />
<b>Deprecated</b>:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}

Nicht der <br /> etc im Code, der von PHP in html eingefügt wird, verursacht den Fehler . Um diese Art von Fehler zu beheben (Warnung unterdrücken), verwenden Sie diesen Code am Anfang

error_reporting(E_ERROR | E_PARSE);

Klicken Sie zum Anzeigen mit der rechten Maustaste auf die Seite "Quelle anzeigen", und überprüfen Sie dann die vollständige HTML-Datei, um diesen Fehler zu erkennen.

0
Hammad Khan

In meinem Fall war es eine falsche URL (nicht vorhanden), also sollte Ihr "Senden" in der zweiten Zeile anders sein ...

0
Michal Wrd