Chrome: Uncaught SyntaxError: Nieoczekiwany koniec danych wejściowych

176

Podczas ładowania mojej strony w Google Chrome pojawia się niejasny błąd w konsoli:

Uncaught SyntaxError: Nieoczekiwany koniec danych wejściowych

Nie mam pojęcia, co to powoduje. Jak mam się zabrać do debugowania tego błędu?

dlaurent86
źródło
2
Sprawdzenie odpowiedzi w snifferze sieciowym może dać wskazówkę. Domyślam się, że Content-lengthnagłówek określa więcej bajtów niż zawiera odpowiedź, a może serwer w jakiś sposób wysyła nieprawidłowy kod HTML.
tdammers
2
Brakuje} przez większość czasu (javascript). Sprawdź koniec swoich zajęć i funkcji. Spróbuj po prostu dodać kolejne zamknięcie} na końcu skryptu i ponownie sformatuj swój kod. Jeśli w kodzie jest jakieś dziwne wcięcie, to gdzieś tuż przed nim jest najprawdopodobniej miejsce, w którym zaginął}.
OG Sean
Miałem ten problem podczas nieprawidłowego ładowania JS. Załadowałem to tak, jak <script>https://example.com/a.js</script>powinno być<script src="https://example.com/a.js"></script>
Daniel Apt,
Ten błąd pojawia się dzisiaj w Arkuszach Google. Domyślam się, że jeden z ich plików JS jest tak duży, że zostaje zakończony bez pełnego ładowania. Lub jeden z ich serwerów aplikacji ma błąd i zamyka połączenie http przed pełnym pobraniem pliku JS.
Teddy

Odpowiedzi:

227

Ten konkretny błąd jest irytującym faktem . W większości przypadków twój JavaScript jest w jakiś sposób uszkodzony. Na przykład brakuje }lub coś takiego.

Podany przykład, spowoduje to również „nieoczekiwany koniec danych wejściowych”:

eval('[{"test": 4}') // notice the missing ]

Ale główną przyczyną problemów wydaje się być to, że żądany adres URL JSON ma typ zawartości, text/htmlktórego Chrome najwyraźniej próbuje przeanalizować jako HTML, co następnie skutkuje nieoczekiwanym zakończeniem wprowadzania danych, ponieważ dołączone tagi obrazu są przeanalizowane.

Spróbuj ustawić typ zawartości na text/plainmyślę, że to powinno rozwiązać problemy.

Niemniej jednak V8 może zrobić lepszą robotę, mówiąc dokładnie, gdzie dane wejściowe zakończyły się nieoczekiwanie.

Ivo Wetzel
źródło
2
ok Dziękuję bardzo, że usunąłem żądanie json razem i błąd zniknął. Jeszcze nie wiem, co dokładnie jest nie tak z moim żądaniem json. Po prostu nie miałem pojęcia, od czego zacząć debugowanie. jeśli mogę zapytać, w jaki sposób ustaliłeś główną przyczynę
dlaurent86
2
To może nie być takie oczywiste. Otrzymałem ten błąd na zminimalizowanym JS, ponieważ został zniekształcony przez minimizer, podczas gdy niezminifikowany JS był całkowicie legalny i ważny. Niestety, Chrome pokazuje tylko wiersz, w którym występuje błąd, którym dla zminimalizowanego JS jest zwykle cały plik ...
Cerin
Nie tak bardzo, gdzie kończyło się wejście (bo to byłoby na końcu). Raczej wiedza, czego się spodziewano, pomogłaby tonom.
AndrewS,
Uratowałem mój ogon. Strasznie denerwowała mnie ta dwuznaczność. Dzięki.
Cypr 106,
4
Miałem ten sam błąd, ponieważ używałem JSON.parse (tekst), a wartość tekstowa była pustym ciągiem
A Khudairy
73

Wypróbuj Firebug dla Mozilli - pokaże pozycję brakującego pliku }.

http://getfirebug.com/


źródło
12
Nie potrzebowałem Firebuga. Konsola w Firefoksie powiedziała mi dokładnie, której linii i jakiego znaku brakuje
Dylan Valade
1
Nie potrzebowałem też firefug. Konsola firefox ctrl+shift+ipowie ci.
Benjamin Crouzier
1
Ostrzeżenie, jeśli skrypt jest zminimalizowany do jednej ogromnej linii, spodziewaj się, że Firefox zawiesi się na kilka minut / godzin / lat.
Cerin,
1
Jest to zdecydowanie najłatwiejszy sposób wyśledzenia tych błędów składniowych
BentOnCoding
mój Boże, dziękuję. Wydaje mi się, że Chrome jest daleko do przodu w porównaniu do Firefoxa pod względem narzędzi programistycznych. to zdumiewające, że nie udaje mu się to zrobić dobrze. uratował mnie od wielkiego bólu głowy!
Isaiah Lee
33

Zobacz moją sprawę na innym podobnym pytaniu :

W moim przypadku próbowałem przeanalizować pusty JSON:

JSON.parse(stringifiedJSON);

Innymi słowy, to, co się stało, było następujące:

JSON.parse("");
falsarella
źródło
2
Tak, miałem też ten! Możesz łatwo rozwiązać, podając „{}” zamiast pustego ciągu
cronoklee
1
Otrzymałem pusty plik json z powodu podwójnego ukośnika w adresie URL (np. Localhost: 8080 // mypath / blagh), a serwer zwracał pustą odpowiedź na to.
jpierson
1
Przyjechałem tu tylko po to, aby potwierdzić to rozwiązanie.
Luís Assunção
10

Ten błąd pojawia się, gdy pominęłam znak nawiasu zamykającego ( }) w kodzie JavaScript. Sprawdź, czy Twoje szelki są odpowiednio wyważone.

HBP
źródło
10

Dla przypomnienia, dla każdego, kto próbuje znaleźć różne przyczyny tego błędu. Pusty atrybut danych HTML5

data-mydata = ''

powoduje również błąd. Należy sprawdzić, czy wartość danych jest ciągiem pustym i nie należy w ogóle uwzględniać atrybutu. Jest to oczywiste, że dotyczy to głównie kodu HTML generowanego przez skrypty.

DroidOS
źródło
Nigdy bym tego nie wymyślił bez ciebie. Używałem VideoJS i skopiowałem kod HTML dla ich odtwarzacza wideo z ich strony. Miał symbol zastępczy atrybutu danych, którego można było użyć, ale ja nie. Film nie ładował się i otrzymywałem błąd, o którym wszyscy mówią. Po usunięciu data-setup='{"example_option":true}' wszystko działało świetnie.
Tyler Buchea
1
@ user1002379, szczęśliwy, że mogłem pomóc.
DroidOS
8

Problem polegał na tym, że robiłem $ .ajax z dataType: "json"żądaniem POST, które zwracało HTTP 201 (utworzone) i nie było treści żądania. Rozwiązaniem było po prostu usunięcie tego klucza / wartości.

Blaskovicz
źródło
Uruchomiłem żądanie AJAX (przesyłanie) i przerwałem je przed zakończeniem i otrzymałem ten błąd.
Dustin Poissant
6

JSHint jest dobry w znajdowaniu lokalizacji brakujących nawiasów lub złej składni.

Harfatum
źródło
6

Inna przyczyna tego błędu: jeśli Twój interfejs API celowo odpowiada bez treści odpowiedzi, ale odpowiada 200 OKkodem stanu zamiast 204 No Contentkodu stanu. Niektóre biblioteki JavaScript mogą nie reagować dobrze na nieoczekiwane typy zawartości, gdy nie ma zawartości, więc użyj poprawnego kodu stanu!

Andrzej
źródło
3

Na pewno pojawi się otwarty nawias, który spowodował błąd.

Proponuję otworzyć stronę w przeglądarce Firefox, a następnie otworzyć Firebug i sprawdzić konsolę - pokaże brakujący symbol.

Przykładowy zrzut ekranu:

Firebug wyróżnia błąd

MKD
źródło
2

Mój problem dotyczył pamięci podręcznej Google Chrome. Przetestowałem to, uruchamiając moją aplikację internetową w przeglądarce Firefox i nie mam tam tego błędu. Więc wtedy zdecydowałem spróbować opróżnić pamięć podręczną Google Chrome i zadziałało.

Amir Al
źródło
1

W przypadkach, gdy kod JavaScript jest zminimalizowany do jednej linii, inną przyczyną tego błędu jest użycie //zamiast /**/komentarzy.

Źle (komentuje wszystko po //dołączeniu zamknięcia }funkcji)

function example() { //comment console.log('TEST'); }

Dobrze (ogranicza Twój komentarz)

function example() { /* comment */ console.log('TEST'); }
Johan Doe
źródło
Pracowałem. Plus, powinieneś używać \ "the-text \" jako odnoszącego się do "the-text" także do przesyłania.
Zatoka
1

W moim przypadku dynamicznie dodawałem javascript i użyłem podwójnych cudzysłowów 2 razy w szablonach ciągów, więc zmieniłem drugi na apostrofy i błąd zniknął. Mam nadzieję, że pomoże to niektórym osobom przyjeżdżającym tutaj z tego samego powodu.

George_kane
źródło
używając addthis
dopisałem do adresu
0

Podobny problem napotkałem przy użyciu dyrektywy ui bootstrap dla angularjs - uib-datepicker, po naciśnięciu przełącznika am / pm.

Błąd w obsłudze zdarzenia dla (nieznane): SyntaxError: Niespodziewany koniec wejściowego kąta czasowego JSON

Okazało się, że było to spowodowane wtyczką „Trans-over” (która tłumaczy słowo po kliknięciu). Może moja odpowiedź komuś pomoże, bo w internecie nic nie znalazłem.

OlehZiniak
źródło
0

Ponieważ jest to operacja asynchroniczna, onreadystatechangemoże się zdarzyć, zanim wartość zostanie załadowana w responseText, spróbuj użyć a, window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); aby sprawdzić, czy błąd nadal występuje? BOL

safhac
źródło
0

Miałem ten błąd i naprawiłem go, dodając strażnika readyStatei statuspokazany tutaj:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};
Cegła
źródło
0

jeśli wystąpił błąd w tagu kotwicy, zamień „Onclick” na „href” lub „href” na „Onclick”

Harsha Annareddy
źródło
0

Ustawienie Acceptnagłówka application/jsonw żądaniu zadziałało, gdy napotkałem ten sam problem.

Stefano Populin
źródło
0

Próba przeanalizowania pustego kodu JSON może być przyczyną tego błędu.

Kiedy otrzymasz odpowiedź z serwera lub czegokolwiek, najpierw sprawdź, czy nie jest pusta. Na przykład:

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

Następnie możesz pobrać za pomocą:

fetch(url, options).then(parseJSON); 
rivelbab
źródło