Chrome: Yakalanmayan Sözdizimi Hatası: Beklenmedik giriş sonu


176

Sayfamı Google Chrome'a ​​yüklerken, konsolda belirsiz bir hata alıyorum:

Yakalanmamış SyntaxError: Beklenmedik giriş sonu

Neye sebep olduğu hakkında hiçbir fikrim yok. Bu hatayı hata ayıklamaya nasıl giderim?


2
Bir ağ dinleyicisindeki yanıtı kontrol etmek size bir ipucu verebilir. Tahminim, Content-lengthüstbilginin yanıtın içerdiğinden daha fazla bayt belirtmesi ya da sunucunun bir şekilde geçersiz HTML göndermesidir.
tdammers

2
} Çoğu zaman eksik (javascript). Sınıflarınızın ve işlevlerinizin sonunu kontrol edin. Betiğinizin sonuna başka bir kapanış} eklemeyi deneyin ve kodunuzu yeniden otomatik olarak biçimlendirin. Kodunuzda garip girinti varsa, o zamandan hemen önce bir yerde büyük olasılıkla a} 'nin kaybolduğu noktadır.
OG Sean

JS yanlış yüklenirken bu sorunu yaşadım. Olarak <script>https://example.com/a.js</script><script src="https://example.com/a.js"></script>
Daniel Apt

Bu hatayı bugün Google E-Tablolar'da alıyorum. Benim tahminim JS dosyalarından biri o kadar büyük ki, tamamen yüklenmeden sonlandırılıyor. Ya da uygulama sunucularından birinde bir hata var ve JS dosyası tamamen indirilmeden önce http bağlantısını kapatıyor.
Teddy

Yanıtlar:


227

Bu özel hata, . Çoğu durumda JavaScript'iniz bir şekilde bozulur. Örneğin, eksik }ya da bunun gibi bir şey.

Verilen örnekte bu da "Beklenmedik giriş sonu" verecektir:

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

Ancak sorunların temel nedeni, istenen JSON URL'sinin, Chrome'un görünüşe göre HTML olarak ayrıştırmaya çalıştığı bir İçerik Türüne sahip text/htmlolduğu görülüyor. çözümlenir.

Belirlemeyi deneyin Content-Type için text/plainben sorunları gidermek gerektiğini düşünüyorum.

Bununla birlikte, V8 , girişin beklenmedik bir şekilde nerede bittiğini söylemek konusunda daha iyi bir iş yapabilir .


2
Tamam Çok teşekkürler ben birlikte json isteği kaldırıldı ve hata gitti ben henüz benim json isteği ile tam olarak neyin yanlış olduğunu anladım. nerede hata ayıklamaya başlayacağımı bilmiyordum. Eğer temel nedeni nasıl belirlediğini sorabilirsem
dlaurent86 29:10

2
O kadar açık olmayabilir. Minimize edilmiş JS'de minimizer tarafından yönetildiği için minimize edilmiş JS'de bu hatayı aldım. Ne yazık ki, Chrome yalnızca hatanın oluştuğu satırı gösterir, simge durumuna küçültülmüş JS için genellikle tüm dosyadır ...
Cerin

Girişin bittiği yerde çok fazla değil (çünkü bu sonunda olurdu). Aksine, ne beklendiğini bilmek tonlarca yardımcı olacaktır.
AndrewS

Kuyruğumu kurtardım. Belirsizlik beni çok kızdırdı. Teşekkürler.
Kıbrıs106

4
JSON.parse (metin) kullanıyordum ve metin değeri boş dize olduğu için aynı hatayla karşılaştım
A Khudairy

73

Mozilla için Firebug'u deneyin - eksiklerin konumunu gösterecektir }.

http://getfirebug.com/


12
Firebug'a gerek yoktu. Firefox'taki konsol bana tam olarak hangi çizginin ve hangi karakterin eksik olduğunu söyledi
Dylan Valade

1
Ateş böceğine de gerek yoktu. Firefox konsolu ctrl+shift+isize söyleyecektir.
Benjamin Crouzier

1
Komut dosyası tek bir çok büyük satıra indirilirse, Firefox'un birkaç dakika / saat / yıl beklemesini bekleyin.
Cerin

1
Bu, bu sözdizimi hatalarını izlemenin en kolay yoludur
BentOnCoding

Tanrım, teşekkür ederim. krom geliştirici takım açısından firefox ile karşılaştırıldığında şimdiye kadar önde gibi hissediyorum. Bu küçük şeyi doğru bir şekilde elde edememesi şaşırtıcı. beni büyük bir baş ağrısından kurtardı!
Isaiah Lee

33

Bkz Davamı diğerine benzer bir soru :

Benim durumumda, boş bir JSON ayrıştırmaya çalışıyordum:

JSON.parse(stringifiedJSON);

Başka bir deyişle, olan şuydu:

JSON.parse("");

2
Evet ben de aldım! Boş bir dize yerine "{}" sağlayarak kolayca çözebilirsiniz
cronoklee

1
Bir URL (örn. Localhost: 8080 // mypath / blagh) çift ileri eğik çizgi nedeniyle boş json alıyordum ve sunucu bunun için boş bir yanıt döndürüyordu.
15:15

1
Bu çözümü onaylamak için geldim.
Luís Assunção

10

}JavaScript kodunda bir kapama ayracı karakteri ( ) ommitted zaman bu hatayı alıyorum . Desteklerinizin dengeli bir şekilde dengelendiğini kontrol edin.


10

Kayıt için, bu hatanın çeşitli nedenlerini bulmaya çalışan herkes için. Boş bir HTML5 veri özelliği

data-mydata = ''

hataya da neden olur. Veri değerinin boş bir dize olup olmadığını ve özniteliği hiç içermediğini kontrol etmelisiniz. Bu büyük ölçüde komut dosyası oluşturulan HTML ile ilgili olduğunu söylemeye gerek yok.


Bunu sensiz asla anlayamazdım. VideoJS kullanıyordum ve video oynatıcıları için html'yi sayfalarından kopyaladım. Kullanabileceğiniz bir veri özniteliği yer tutucusu vardı ama ben değildim. Video yüklenmiyordu ve herkesin bahsettiği hatayı alıyordum. Sildikten sonra data-setup='{"example_option":true}' Her şey harika çalıştı.
Tyler Buchea

1
@ user1002379, mutlu yardımcı olabilirim.
DroidOS

8

Benim için sorun ben dataType: "json"bir HTTP 201 (oluşturulan) ve hiçbir istek gövdesi döndüren bir POST isteği için $ .ajax ile yapıyordu oldu. Düzeltme sadece o anahtarı / değeri kaldırmaktı.


Bir ajax isteği (upload) başlattım ve tamamlanmadan önce iptal ettim ve bu hatayı aldım.
Dustin Poissant


6

Bu hatanın başka bir nedeni: API'nız kasıtlı olarak yanıt gövdesi olmadan yanıt veriyorsa, ancak 200 OKdurum kodu yerine bir durum kodu ile yanıt veriyorsa 204 No Content. Bazı JavaScript kitaplıkları, içerik olmadığında beklenmeyen içerik türlerine iyi yanıt vermeyebilir, bu nedenle doğru durum kodunu kullanın!


3

Kesinlikle hataya neden olan açık bir braket olacaktır.

Sayfayı Firefox'ta açmanızı, ardından Firebug'u açıp konsolu kontrol etmenizi öneririm - eksik sembolü gösterecektir.

Örnek ekran görüntüsü:

Firebug hatayı vurgulama


2

Sorunum Google Chrome önbelleğiyle oldu. Bunu web uygulamamı Firefox'ta çalıştırarak test ettim ve orada bu hatayı almadım. Sonra Google Chrome'un önbelleğini boşaltmaya karar verdim ve işe yaradı.


1

JavaScript kodunuzun tek bir satıra küçültülmesi durumunda , yorumlarınız //yerine bu hatanın başka bir nedeni kullanılıyor /**/.

Kötü ( işlevinizin //kapanışını ekledikten sonra her şeyi yorumlar })

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

İyi (yorumunuzu sınırlar)

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

Ayrıca, artı, döküm için "metin" anlamına gelen \ "metin-" kullanmalısınız.
Bay

1

Benim durumumda dinamik olarak javascript ekleyerek ve dize şablonlarında 2 kez çift tırnak kullanarak ikinci tek tırnak için değiştirdi ve hata gitti. Umarım buraya gelen bazı insanlara aynı sebepten dolayı yardımcı olur.


addthis kullanarak URL'ye çift dize ile ekledim ve sonra tek tek tırnakla değiştirdim ve konsol hatası kayboldu
tfa

0

Am / pm toggle tuşuna basarken angularjs - uib-datepicker için ui bootstrap yönergesini kullanarak benzer bir sorunla karşılaştım.

Olay işleyicisinde hata (bilinmiyor): Sözdizimi Hatası: JSON girişi açısal zamanlayıcısının beklenmedik sonu

'Trans-over' eklentisi olduğu ortaya çıktı (tıklandığında bir kelimeyi çevirir). Belki cevabım birine yardım edecek, çünkü internette hiçbir şey bulamadım.


0

onreadystatechangeDeğeri responseText'e yüklenmeden önce gerçekleşen bir eşzamansız işlem window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); olduğundan, hatanın devam edip etmediğini görmek için a kullanmayı deneyin ? BOL


0

Ben bu hatayı vardı ve nöbet ekleyerek sabit readyStateve statusburada gösterilen:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};

0

Bağlantı etiketinde hata varsa, "Onclick" yerine "href" veya "href" yerine "Onclick" yazın


0

Aynı sorunla karşılaştığımda , Acceptüstbilgiyi application/jsonistekte ayarlamak benim için çalıştı.


0

Boş bir JSON ayrıştırmaya çalışmak bu hatanın nedeni olabilir.

Sunucudan bir yanıt aldığınızda veya her neyse, önce boş olup olmadığını kontrol edin. Örneğin:

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

Ardından aşağıdakileri getirebilirsiniz:

fetch(url, options).then(parseJSON); 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.