Chrome: Uncaught SyntaxError: Akhir input yang tidak terduga

176

Saat memuat halaman saya di Google Chrome, saya mendapatkan kesalahan yang tidak jelas di konsol:

Uncaught SyntaxError: Akhir input yang tidak terduga

Saya tidak tahu apa yang menyebabkannya. Bagaimana saya bisa men-debug kesalahan ini?

dlaurent86
sumber
2
Memeriksa respons dalam sniffer jaringan mungkin memberi Anda petunjuk. Dugaan saya adalah bahwa Content-lengthheader menentukan lebih banyak byte daripada yang berisi respons, atau mungkin server entah bagaimana mengirim HTML yang tidak valid.
tdammers
2
Tidak ada} sebagian besar waktu (javascript). Periksa akhir kelas dan fungsi Anda. Coba tambahkan saja penutup lain} di akhir skrip Anda dan setel ulang otomatis kode Anda. Jika ada lekukan aneh dalam kode Anda, maka di suatu tempat sebelum itu kemungkinan besar tempat di mana a} telah hilang.
OG Sean
Saya memiliki masalah ini ketika memuat JS dengan tidak benar. Saya memuatnya sebagaimana <script>https://example.com/a.js</script>mestinya<script src="https://example.com/a.js"></script>
Daniel Apt
Saya mendapatkan kesalahan ini hari ini di Google Sheets. Dugaan saya adalah salah satu file JS mereka sangat besar sehingga dihentikan tanpa memuat sepenuhnya. Atau salah satu server aplikasi mereka memiliki bug dan menutup koneksi http sebelum file JS sepenuhnya diunduh.
Teddy

Jawaban:

227

Kesalahan khusus ini adalah salah satu fakta yang menjengkelkan . Dalam kebanyakan kasus, JavaScript Anda rusak dalam beberapa cara. Misalnya melewatkan }atau semacamnya.

Contoh yang diberikan, ini akan menghasilkan "Akhir input yang tidak terduga" juga:

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

Tapi akar penyebab masalah tampaknya bahwa url JSON yang diminta memiliki Content-Type dari text/htmlyang Chrome tampaknya mencoba untuk mengurai sebagai HTML, yang kemudian hasil di akhir tak terduga masukan karena fakta bahwa tag gambar disertakan sedang diuraikan.

Coba atur Content-Type ke text/plainsaya pikir itu harus memperbaiki masalah.

Meskipun demikian, V8 bisa melakukan pekerjaan yang lebih baik tentang memberi tahu persis di mana input berakhir tanpa terduga.

Ivo Wetzel
sumber
2
ok Terima kasih banyak saya menghapus semua permintaan json dan kesalahan hilang saya belum mengetahui apa sebenarnya yang salah dengan permintaan json saya. saya tidak tahu harus mulai dari mana. jika saya dapat bertanya bagaimana Anda menentukan penyebab root
dlaurent86
2
Mungkin tidak sejelas itu. Saya mendapatkan kesalahan ini pada JS yang diperkecil karena dibuat oleh minimizer, sedangkan JS yang tidak ditambang benar-benar legal dan valid. Sayangnya, Chrome hanya menunjukkan baris tempat kesalahan terjadi, yang untuk JS yang diperkecil biasanya seluruh file ...
Cerin
Tidak begitu banyak di mana input berakhir (karena itu akan di akhir). Sebaliknya, mengetahui apa yang diharapkan akan membantu banyak.
AndrewS
Menyelamatkan ekor saya. Saya menjadi sangat terganggu oleh ambiguitas. Terima kasih.
Cyprus106
4
Saya memiliki kesalahan yang sama, karena saya menggunakan JSON.parse (teks) dan nilai teks adalah string kosong
A Khudairy
73

Coba Firebug untuk Mozilla - ini akan menunjukkan posisi yang hilang }.

http://getfirebug.com/


sumber
12
Tidak perlu Firebug. Konsol di Firefox memberi tahu saya baris dan karakter apa yang hilang
Dylan Valade
1
Juga tidak perlu pemadam kebakaran. Konsol firefox ctrl+shift+iakan memberi tahu Anda.
Benjamin Crouzier
1
Peringatan, jika skrip diperkecil menjadi satu baris besar, harapkan Firefox akan hang selama beberapa menit / jam / tahun.
Cerin
1
Sejauh ini, ini adalah cara termudah untuk melacak kesalahan sintaksis ini
BentOnCoding
Ya Tuhan, terima kasih. Saya merasa chrome jauh di depan dibandingkan dengan firefox dalam hal tooling pengembang. Sungguh menakjubkan bagaimana ia gagal mendapatkan hal kecil ini dengan benar. menyelamatkan saya dari sakit kepala besar!
Isaiah Lee
33

Lihat kasus saya pada pertanyaan serupa lainnya :

Dalam kasus saya, saya mencoba mengurai JSON kosong:

JSON.parse(stringifiedJSON);

Dengan kata lain, yang terjadi adalah sebagai berikut:

JSON.parse("");
falsarella
sumber
2
Ya saya juga punya yang ini! Anda dapat memecahkan dengan mudah dengan memberikan "{}" alih-alih string kosong
cronoklee
1
Saya menerima json kosong karena garis miring ganda di URL (mis. Localhost: 8080 // mypath / blagh) dan server mengembalikan respons kosong untuk ini.
jpierson
1
Saya datang ke sini hanya untuk mengkonfirmasi solusi ini.
Luís Assunção
10

Saya mendapatkan kesalahan ini ketika saya telah menonaktifkan karakter kurung kurawal ( }) dalam kode JavaScript. Pastikan kawat gigi Anda seimbang dengan benar.

HBP
sumber
10

Sebagai catatan, bagi siapa pun yang mencoba menemukan berbagai penyebab kesalahan ini. Atribut data HTML5 kosong

data-mydata = ''

menyebabkan kesalahan juga. Anda harus memeriksa kapan nilai data adalah string nol dan tidak menyertakan atribut sama sekali. Tak perlu dikatakan ini sebagian besar relevan dengan script yang dihasilkan HTML.

DroidOS
sumber
Tidak akan pernah menemukan ini tanpa Anda. Saya menggunakan VideoJS dan saya menyalin html untuk pemutar video mereka dari halaman mereka. Itu placeholder atribut data yang bisa Anda gunakan tapi saya tidak. Video tidak dimuat dan saya mendapatkan kesalahan yang dibicarakan semua orang. Setelah menghapus data-setup='{"example_option":true}' semuanya bekerja dengan baik.
Tyler Buchea
1
@ user1002379, senang saya bisa membantu.
DroidOS
8

Masalahnya bagi saya adalah saya melakukan $ .ajax dengan dataType: "json"untuk permintaan POST yang mengembalikan HTTP 201 (dibuat) dan tidak ada badan permintaan. Cara mengatasinya adalah dengan hanya menghapus kunci / nilai itu.

Blaskovicz
sumber
Saya memulai permintaan ajax (unggah) dan membatalkannya sebelum selesai dan saya mendapatkan kesalahan ini.
Dustin Poissant
6

JSHint pandai menemukan lokasi tanda kurung yang hilang atau sintaksis yang buruk.

Harfatum
sumber
6

Penyebab lain kesalahan ini: jika API Anda secara sengaja merespons tanpa badan respons, tetapi merespons dengan 200 OKkode status alih-alih 204 No Contentkode status. Beberapa perpustakaan JavaScript mungkin tidak merespon dengan baik untuk tipe konten yang tidak diharapkan ketika tidak ada konten, jadi gunakan kode status yang benar!

Andrew
sumber
3

Pasti akan ada braket terbuka yang menyebabkan kesalahan.

Saya sarankan Anda membuka halaman di Firefox, lalu buka Firebug dan periksa konsol - itu akan menunjukkan simbol yang hilang.

Tangkapan layar contoh:

Firebug menyoroti kesalahan

MKD
sumber
2

Masalah saya adalah dengan cache Google Chrome. Saya menguji ini dengan menjalankan aplikasi web saya di Firefox dan saya tidak mendapatkan kesalahan di sana. Jadi saya memutuskan mencoba mengosongkan cache Google Chrome dan berhasil.

Amir Al
sumber
1

Dalam kasus di mana kode JavaScript Anda diperkecil menjadi satu baris, penyebab lain kesalahan ini adalah //alih-alih menggunakan/**/ untuk komentar Anda.

Buruk (komentar semuanya setelah //termasuk penutupan }untuk fungsi Anda)

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

Bagus (membatasi komentar Anda)

function example() { /* comment */ console.log('TEST'); }
Johan Doe
sumber
Berhasil, Plus, Anda harus menggunakan \ "the-text \" sebagaimana merujuk ke "the-text" juga untuk casting.
Teluk
1

Dalam kasus saya, saya menambahkan javascript secara dinamis dan menggunakan tanda kutip ganda 2 kali dalam templat string jadi saya mengubah yang kedua menjadi tanda kutip tunggal dan kesalahannya hilang. Saya harap ini akan membantu beberapa orang yang datang ke sini untuk alasan yang sama.

George_kane
sumber
menggunakan addthis ini saya tambahkan ke url dengan string ganda dan kemudian diubah menjadi kutipan tunggal dan kesalahan konsol menghilang
tfa
0

Saya menghadapi masalah yang sama menggunakan direktif bootui ui untuk angularjs - uib-datepicker, ketika menekan am / pm toggle.

Kesalahan dalam pengendali event untuk (tidak diketahui): Sintaksaksir: Akhir dari sudut pandang sudut input JSON yang tidak terduga

Ternyata itu karena plugin 'Trans-over' (yang menerjemahkan sebuah kata ketika diklik). Mungkin jawaban saya akan membantu seseorang, karena saya tidak menemukan apa pun di internet.

OlehZiniak
sumber
0

Karena ini adalah operasi async, hal itu onreadystatechangedapat terjadi sebelum nilai dimuat di responseText, coba gunakan window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); untuk melihat apakah kesalahan tetap ada? BOL

safhac
sumber
0

Saya memiliki kesalahan ini dan memperbaikinya dengan menambahkan penjaga readyStatedan statusditampilkan di sini:

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

jika Anda mendapat kesalahan pada tag Anchor, cukup ganti "Onclick" dengan "href" atau "href" dengan "Onclick"

Harsha Annareddy
sumber
0

Menyetel Accepttajuk ke application/jsondalam permintaan berhasil saat saya menghadapi masalah yang sama.

Stefano Populin
sumber
0

Mencoba mem-parse JSON kosong dapat menjadi penyebab kesalahan ini.

Ketika Anda menerima respons dari server atau apa pun, periksa dulu apakah itu tidak kosong. Sebagai contoh:

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

Kemudian Anda dapat mengambil dengan:

fetch(url, options).then(parseJSON); 
rivelbab
sumber