Ich führe einen AJAX-Aufruf in meinem MooTools-Skript aus. Dies funktioniert in Firefox einwandfrei, aber in Chrome wird eine Uncaught SyntaxError: Unexpected token :
Fehlermeldung angezeigt. Ich kann nicht feststellen, warum. Das Auskommentieren von Code, um festzustellen, wo sich der fehlerhafte Code befindet, ergibt nichts. Ich denke, dass dies ein Problem mit der Rückgabe des JSON sein kann. Beim Einchecken in die Konsole wird Folgendes angezeigt:
{"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();
});
});
javascript
mootools
google-chrome
Trobrock
quelle
quelle
Antworten:
Rote Fehler sehen
Auf der Konsolenregisterkarte Ihres Chrome-Entwicklers wird HTML im Antworttext angezeigt.
Was Sie tatsächlich sehen, ist die Reaktion Ihres Browsers auf die unerwartete oberste Zeile
<!DOCTYPE html>
vom Server.quelle
Unexpected token :
. Ihre Antwort hat nichts mit dem Problem von OP zu tun.Nur zu Ihrer Information für Leute, die möglicherweise das gleiche Problem haben - ich musste nur meinen Server dazu bringen, den JSON als application / json zurückzusenden, und der Standard-jQuery-Handler funktionierte einwandfrei.
quelle
application/json
um den Fehler beheben. Ich benutze kein JSONP.Das ist mir gerade passiert, und der Grund war keiner der oben genannten Gründe. Ich habe den jQuery-Befehl getJSON verwendet und hinzugefügt
callback=?
, um JSONP zu verwenden (da ich domänenübergreifend arbeiten musste), den JSON-Code zurückgegeben{"foo":"bar"}
und den Fehler erhalten.Dies liegt daran, dass ich die Rückrufdaten hätte einschließen sollen, so etwas wie
jQuery17209314005577471107_1335958194322({"foo":"bar"})
Hier ist der PHP-Code, den ich verwendet habe, um dies zu erreichen, der sich verschlechtert, wenn JSON (ohne Rückruf) verwendet wird:
Hoffentlich hilft das jemandem in Zukunft.
quelle
Ich habe gerade das Problem gelöst. Es gab etwas, das Probleme mit einem Standardanforderungsaufruf verursachte. Dies ist also der Code, den ich stattdessen verwendet habe:
Wenn jemand weiß, warum das Standard-Anforderungsobjekt mir Probleme bereitete, würde ich es gerne wissen.
quelle
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
- go figure$$
dort?Ich dachte, ich würde mein Problem und meine Lösung zur Liste hinzufügen.
Ich bekam:
Uncaught SyntaxError: Unexpected token <
und der Fehler zeigte auf diese Zeile in meiner Ajax-Erfolgserklärung:Ich fand später heraus, dass zusätzlich zu den JSON-Ergebnissen HTML mit der Antwort gesendet wurde, weil ich einen Fehler in meinem PHP hatte. Wenn Sie in PHP einen Fehler erhalten, können Sie ihn so einstellen, dass er Sie mit riesigen orangefarbenen Tabellen warnt, und diese Tabellen haben den JSON ausgelöst.
Ich fand das heraus, indem ich einfach ein
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 zu prüfen, ob Sie ein console.log oder eine andere Anweisung ausführen können, mit der Sie sehen können, was gesendet und was empfangen wird.quelle
Wenn Sie Ihre JSON-Datei anfordern, gibt der Server den JavaScript-
Content-Type
Header (text/javascript
) anstelle von JSON (application/json
) den ) zurück.Laut MooTools docs :
Im Ergebnis versucht MooTools, Ihren JSON als JavaScript zu bewerten, und wenn Sie versuchen, einen solchen JSON zu bewerten:
Als JavaScript behandelt Parser
{
und}
als Blockbereich anstelle der Objektnotation. Dies entspricht der Auswertung des folgenden "Codes":Wie Sie sehen können,
:
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.json
Erweiterung speichern , sollte Ihr Server dies selbst tun.quelle
Es hört sich so an, als würde Ihre Antwort irgendwie ausgewertet. Dies gibt den gleichen Fehler in Chrome:
Dies liegt daran, dass die geschweiften Klammern '{...}' von Javascript als Codeblock und nicht wie erwartet als Objektliteral interpretiert werden.
Ich würde mir die Funktion JSON.decode () ansehen und sehen, ob dort eine Bewertung vorhanden ist.
Ähnliches Problem hier: Eval () = Unerwartetes Token: Fehler
quelle
Wenn nichts Sinn macht, kann dieser Fehler auch durch einen PHP-Fehler verursacht werden, der in HTML / Javascript eingebettet ist, wie der folgende
Nicht das
<br />
usw. im Code, das von PHP in HTML eingefügt wird, verursacht den Fehler . Verwenden Sie diesen Code zu Beginn, um diese Art von Fehler zu beheben (Warnung unterdrücken)Klicken Sie zum Anzeigen mit der rechten Maustaste auf die Seite "Quelle anzeigen" und überprüfen Sie das vollständige HTML, um diesen Fehler zu erkennen.
quelle
Fehler beim Auftreten von " Uncaught SyntaxError: Unexpected token ", wenn Ihre Daten ein falsches JSON-Format zurückgeben. In einigen Fällen wissen Sie nicht, dass Sie ein falsches JSON-Format haben.
Bitte überprüfen Sie es mit alert (); Funktion
Ihre empfangene Nachricht sollte lauten: {"Vorname": "John", "Nachname": "Doe"}
und dann können Sie den folgenden Code verwenden
mit aus - Fehler „ Nicht abgefangene Syntaxerror: unerwartetes Token “
aber wenn Sie falsch json - Format erhalten
ab:
oder
Damit Sie ein falsches JSON-Format haben, beheben Sie es bitte, bevor Sie JSON.decode oder JSON.parse verwenden
quelle
console.log()
anstelle vonalert()
zum Debuggen.Das ist mir heute auch passiert. Ich habe EF verwendet und eine Entität als Antwort auf einen AJAX-Anruf zurückgegeben. Die virtuellen Eigenschaften 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.
quelle
Dies geschah, weil ich auf meinem Express-Server eine Regel eingerichtet habe, um alle 404 zurück zu
/#
plus der ursprünglichen Anforderung weiterzuleiten. Ermöglichen, dass der Winkelrouter / js die Anforderung verarbeitet. Wenn es keine js-Route gibt, die diesen Pfad verarbeitet, wird eine Anforderung/#/whatever
an den Server gesendet, die nur eine Anforderung für ist/
die gesamte Webseite handelt.Wenn ich zum Beispiel eine Anfrage stellen wollte, diese
/correct/somejsfile.js
aber nicht tippe, wird/wrong/somejsfile.js
die Anfrage an den Server gesendet. Dieser Speicherort / diese Datei ist nicht vorhanden, daher antwortet der Server mit einem302 location: /#/wrong/somejsfile.js
. Der Browser folgt gerne der Weiterleitung und die gesamte Webseite wird zurückgegeben. Der Browser analysiert die Seite als js und Sie erhaltenUm den fehlerhaften Pfad / die fehlerhafte Anforderung zu finden, suchen Sie nach 302 Anforderungen.
Hoffe das hilft jemandem.
quelle
Ich hatte das gleiche Problem und es stellte sich heraus, dass der vom Server zurückgegebene Json kein gültiger Json-P war. Wenn Sie den Anruf nicht als domänenübergreifenden Anruf verwenden, verwenden Sie regulären Json.
quelle
Ich habe ein "
SyntaxError: Unexpected token I
" erhalten, als ichjQuery.getJSON()
versucht habe, einen Gleitkommawert von zu de-serialisierenInfinity
, codiert alsINF
, was in JSON illegal ist.quelle
In meinem Fall ist beim Ausführen der Spring-MVC-Anwendung derselbe Fehler aufgetreten, da die Zuordnung in meinem MVC-Controller falsch war
Ich habe die obige Zuordnung in geändert
oder
quelle
Für mich ging die Glühbirne an, als ich die Quelle auf der Seite im Chrome-Browser betrachtete. Ich hatte eine zusätzliche Klammer in einer if-Anweisung. Sie sehen sofort den roten Kreis mit einem Kreuz auf der fehlerhaften Linie. Dies ist eine eher wenig hilfreiche Fehlermeldung, da das Token "Nicht erfasster Syntaxfehler: Unerwartet" keinen Verweis auf eine Zeilennummer enthält, wenn es zum ersten Mal in der Konsole von Chrome angezeigt wird.
quelle
Ich habe das falsch gemacht
Ich habe die
fs
Variable bereits initialisiert. Aber ich habe wiedervar
die zweite Zeile eingefügt. Diese gibt auch diese Art von Fehler ...quelle
Für diejenigen, die dies in AngularJs 1.4.6 oder ähnlichem erlebten, bestand mein Problem darin, dass Angular meine Vorlage nicht fand, da die Datei unter dem von
templateUrl
mir angegebenen (Pfad) nicht gefunden werden konnte. Ich musste nur einen erreichbaren Weg angeben und das Problem ging weg.quelle
In meinem Fall war es eine fehlerhafte URL (nicht vorhanden), daher sollte Ihr "Senden" in der zweiten Zeile möglicherweise eine andere sein ...
quelle
Mein Fehler war, das einfache / doppelte Zitat zu vergessen um die URL in Javascript zu :
so falscher Code war:
und korrekter Code:
quelle
Nicht erfasster SyntaxError: Unerwartetes Token}
Chrome hat mir den Fehler für diesen Beispielcode gemeldet:
und löste es, indem man den Klick so korrigierte, dass er so war
Aber der Fehler hat nichts mit dem Problem zu tun.
quelle