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?
debugging
google-chrome
syntax-error
dlaurent86
sumber
sumber
Content-length
header menentukan lebih banyak byte daripada yang berisi respons, atau mungkin server entah bagaimana mengirim HTML yang tidak valid.<script>https://example.com/a.js</script>
mestinya<script src="https://example.com/a.js"></script>
Jawaban:
Kesalahan khusus ini adalah salah satu fakta yang menjengkelkan v8. 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:
Tapi akar penyebab masalah tampaknya bahwa url JSON yang diminta memiliki Content-Type dari
text/html
yang 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/plain
saya pikir itu harus memperbaiki masalah.Meskipun demikian, V8 bisa melakukan pekerjaan yang lebih baik tentang memberi tahu persis di mana input berakhir tanpa terduga.
sumber
Coba Firebug untuk Mozilla - ini akan menunjukkan posisi yang hilang
}
.http://getfirebug.com/
sumber
ctrl+shift+i
akan memberi tahu Anda.Lihat kasus saya pada pertanyaan serupa lainnya :
sumber
Saya mendapatkan kesalahan ini ketika saya telah menonaktifkan karakter kurung kurawal (
}
) dalam kode JavaScript. Pastikan kawat gigi Anda seimbang dengan benar.sumber
Sebagai catatan, bagi siapa pun yang mencoba menemukan berbagai penyebab kesalahan ini. Atribut data HTML5 kosong
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.
sumber
data-setup='{"example_option":true}'
semuanya bekerja dengan baik.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.sumber
JSHint pandai menemukan lokasi tanda kurung yang hilang atau sintaksis yang buruk.
sumber
Penyebab lain kesalahan ini: jika API Anda secara sengaja merespons tanpa badan respons, tetapi merespons dengan
200 OK
kode status alih-alih204 No Content
kode 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!sumber
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:
sumber
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.
sumber
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)Bagus (membatasi komentar Anda)
sumber
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.
sumber
Saya menghadapi masalah yang sama menggunakan direktif bootui ui untuk angularjs - uib-datepicker, ketika menekan am / pm toggle.
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.
sumber
Karena ini adalah operasi async, hal itu
onreadystatechange
dapat terjadi sebelum nilai dimuat di responseText, coba gunakanwindow.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000);
untuk melihat apakah kesalahan tetap ada? BOLsumber
Saya memiliki kesalahan ini dan memperbaikinya dengan menambahkan penjaga
readyState
danstatus
ditampilkan di sini:sumber
jika Anda mendapat kesalahan pada tag Anchor, cukup ganti "Onclick" dengan "href" atau "href" dengan "Onclick"
sumber
Menyetel
Accept
tajuk keapplication/json
dalam permintaan berhasil saat saya menghadapi masalah yang sama.sumber
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:
Kemudian Anda dapat mengambil dengan:
sumber