W moim skrypcie MooTools uruchamiam wywołanie AJAX, działa to dobrze w przeglądarce Firefox, ale w Chrome pojawia się Uncaught SyntaxError: Unexpected token :
błąd, nie mogę ustalić przyczyny. Komentowanie kodu w celu ustalenia, gdzie znajduje się zły kod, nic nie daje, myślę, że może to być problem ze zwróconym JSON. Sprawdzam w konsoli, czy JSON zwrócił:
{"votes":47,"totalvotes":90}
Nie widzę z tym żadnych problemów, dlaczego miałby wystąpić ten błąd?
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
źródło
źródło
Odpowiedzi:
Widzę czerwone błędy
na karcie konsoli programisty Chrome jest wskazanie HTML w treści odpowiedzi.
To, co tak naprawdę widzisz, to reakcja przeglądarki na nieoczekiwany górny wiersz
<!DOCTYPE html>
z serwera.źródło
Unexpected token :
. Twoja odpowiedź jest całkowicie niezwiązana z problemem OP.Tylko FYI dla osób, które mogą mieć ten sam problem - musiałem tylko zmusić mój serwer do odesłania JSON, ponieważ aplikacja / json i domyślny moduł obsługi jQuery działały dobrze.
źródło
application/json
rozwiązania błędu. Nie używam JSONP.Tak mi się właśnie stało, a powodem nie był żaden z powyższych powodów. Korzystałem z komendy jQuery
callback=?
getJSON i dodawałem, aby używać JSONP (ponieważ potrzebowałem przejść między domenami), zwracałem kod JSON{"foo":"bar"}
i otrzymywałem błąd.Wynika to z faktu, że powinienem dołączyć dane wywołania zwrotnego, coś w rodzaju
jQuery17209314005577471107_1335958194322({"foo":"bar"})
Oto kod PHP, którego użyłem, aby to osiągnąć, co zmniejsza się, jeśli użyje się JSON (bez wywołania zwrotnego):
Mam nadzieję, że to pomoże komuś w przyszłości.
źródło
Właśnie rozwiązałem problem. Coś powodowało problemy ze standardowym wywołaniem żądania, więc użyłem tego kodu:
Jeśli ktoś wie, dlaczego standardowy obiekt Request powodował problemy, chciałbym wiedzieć.
źródło
this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
- idź$$
?Pomyślałem, że dodam mój problem i rozwiązanie do listy.
Otrzymywałem:
Uncaught SyntaxError: Unexpected token <
i błąd wskazywał na ten wiersz w moim oświadczeniu powodzenia ajax:Później dowiedziałem się, że oprócz wyników JSON-a wysłano HTML z odpowiedzią, ponieważ miałem błąd w moim PHP. Kiedy pojawia się błąd w PHP, możesz ustawić go tak, aby ostrzegał cię przed ogromnymi pomarańczowymi tabelami, a te tabele były tym, co rzucało JSON.
Dowiedziałem się tego, po prostu robiąc
console.log(response)
, aby zobaczyć, co faktycznie zostało wysłane. Jeśli jest to problem z danymi JSON, po prostu spróbuj sprawdzić, czy możesz zrobić plik console.log lub inną instrukcję, która pozwoli ci zobaczyć, co jest wysyłane i co odbierane.źródło
Gdy zażądasz pliku JSON, serwer zwraca JavaScript
Content-Type
header (text/javascript
) zamiast JSON (application/json
).Według dokumentów MooTools :
W rezultacie MooTools próbuje ocenić twój JSON jako JavaScript, a kiedy próbujesz ocenić taki JSON:
jako JavaScript, parser traktuje
{
i}
jako zakres blokowy zamiast notacji obiektowej. Jest to to samo, co ocena następującego „kodu”:Jak widać,
:
jest całkowicie nieoczekiwany.Rozwiązaniem jest ustawienie poprawnego
Content-Type
nagłówka dla pliku JSON. Jeśli zapiszesz go z.json
rozszerzeniem, twój serwer powinien zrobić to sam.źródło
Wygląda na to, że Twoja odpowiedź jest w jakiś sposób oceniana. Daje to ten sam błąd w Chrome:
Wynika to z interpretacji nawiasów klamrowych {{}} przez javascript jako bloku kodu, a nie literału obiektu, jak można się spodziewać.
Chciałbym spojrzeć na funkcję JSON.decode () i sprawdzić, czy jest tam eval.
Podobny problem tutaj: Eval () = Nieoczekiwany token: błąd
źródło
Jeśli nic nie ma sensu, ten błąd może być również spowodowany błędem PHP osadzonym w html / javascript, takim jak ten poniżej
Nie
<br />
etc w kodzie, który jest wstawiany do HTML przez PHP . Aby naprawić tego rodzaju błąd (pomiń ostrzeżenie), użyj tego kodu na początkuAby wyświetlić, kliknij prawym przyciskiem myszy stronę, „wyświetl źródło”, a następnie sprawdź pełny kod HTML, aby wykryć ten błąd.
źródło
Błąd „ Uncaught SyntaxError: Nieoczekiwany token ” pojawia się, gdy dane zwracają niewłaściwy format JSON, w niektórych przypadkach nie wiesz, że masz zły format JSON.
sprawdź to za pomocą alert (); funkcjonować
Twoja wiadomość powinna otrzymać: {„firstName”: „John”, „lastName”: „Doe”},
a następnie możesz użyć kodu poniżej
bez błędu „ Nieprzechwycony błąd składni: nieoczekiwany token ”,
ale jeśli wystąpi zły format json
np .:
lub
abyś miał zły format JSON, popraw go przed JSON.decode lub JSON.parse
źródło
console.log()
zamiastalert()
do debugowania.To zdarzyło mi się również dzisiaj. Używałem EF i zwracałem Encję w odpowiedzi na wywołanie AJAX. Wirtualne właściwości mojej jednostki powodowały cykliczny błąd zależności, który nie został wykryty na serwerze. Dodanie atrybutu [ScriptIgnore] do właściwości wirtualnych rozwiązało problem.
Zamiast używać atrybutu ScriptIgnore, prawdopodobnie lepiej byłoby po prostu zwrócić DTO.
źródło
Stało się tak, ponieważ mam konfigurację reguł na moim serwerze ekspresowym, aby kierować dowolne 404 z powrotem na
/#
plus niezależnie od tego, jakie było pierwotne żądanie. Zezwolenie routerowi kątowemu / js na obsługę żądania. Jeśli nie ma trasy js do obsługi tej ścieżki, wysyłane jest żądanie do/#/whatever
serwera, które jest tylko żądaniem dla/
całej strony.Na przykład, jeśli chciałbym złożyć wniosek,
/correct/somejsfile.js
ale nie napisałem go, aby/wrong/somejsfile.js
żądanie zostało przesłane do serwera. Ta lokalizacja / plik nie istnieje, więc serwer odpowiada za pomocą302 location: /#/wrong/somejsfile.js
. Przeglądarka z radością podąża za przekierowaniem i cała strona jest zwracana. Przeglądarka analizuje stronę jako js i dostajeszAby więc znaleźć szkodliwą ścieżkę / żądanie, poszukaj 302 żądań.
Mam nadzieję, że komuś pomoże.
źródło
Miałem ten sam problem i okazało się, że Json wrócił z serwera nie był prawidłowy Json-P. Jeśli nie używasz połączenia jako połączenia między domenami, użyj zwykłego Jsona.
źródło
Dostałem „
SyntaxError: Unexpected token I
”, gdyjQuery.getJSON()
próbowałem zserializować wartość zmiennoprzecinkowąInfinity
, zakodowaną jakoINF
, co jest nielegalne w JSON.źródło
W moim przypadku napotkałem ten sam błąd podczas uruchamiania wiosennej aplikacji mvc z powodu nieprawidłowego mapowania w moim kontrolerze mvc
zmieniłem powyższe mapowanie na
lub
źródło
Dla mnie żarówka zapaliła się, gdy zobaczyłem źródło strony w przeglądarce Chrome. Miałem dodatkowy nawias w instrukcji if. Od razu zobaczysz czerwone kółko z krzyżem na linii, która nie działa. Jest to raczej nieprzydatny komunikat o błędzie, ponieważ błąd nieprzechwyconej składni: nieoczekiwany token nie odwołuje się do numeru linii, gdy pojawia się po raz pierwszy w konsoli Chrome.
źródło
Zrobiłem w tym źle
Już zainicjalizowałem
fs
zmienną, ale ponownie wstawiłemvar
drugą linię, która również daje taki błąd ...źródło
Dla osób, które doświadczają tego w AngularJs 1.4.6 lub podobnym, moim problemem było to, że Angular nie znalazł mojego szablonu, ponieważ nie mogłem znaleźć pliku w
templateUrl
(ścieżce), który podałem. Musiałem tylko zapewnić dostępną ścieżkę i problem zniknął.źródło
W moim przypadku był to błędny adres URL (nieistniejący), więc może twoje „wyślij” w drugiej linii powinno być inne ...
źródło
Moim błędem było zapomnienie o pojedynczym / podwójnym cytacie wokół adresu URL w javascript:
więc zły kod to:
i poprawny kod:
źródło
Uncaught SyntaxError: Nieoczekiwany token}
Chrome dał mi błąd dla tego przykładowego kodu:
i rozwiązałem to, naprawiając kliknięcie
Ale błąd nie ma nic wspólnego z problemem.
źródło