SyntaxError: Token tak terduga << di JSON pada posisi 0
menunjukkan bahwa kode JavaScript menerima data non-JSON, biasanya HTML, bukan JSON yang diharapkan. Untuk memperbaiki masalah ini, periksa data yang diterima untuk menentukan masalahnya. Jika menggunakan fetch() atau JSON.parse(), catat data ke konsol dan periksa masalah umum seperti URL yang salah, kesalahan server, atau masalah penetapan variabel dan pengodean karakter.Panduan ini akan membantu memperbaiki SyntaxError: Token tak terduga < di JSON pada posisi 0
. Panduan ini juga berlaku untuk varian umum lainnya dari kesalahan yang sama:
SyntaxError: String tidak sesuai dengan pola yang diharapkan.
SyntaxError: JSON.parse: karakter tak terduga pada baris 1 kolom 1 dari data JSON
Kesalahan Penguraian JSON: Token tidak dikenal '<'
Kesalahan ini menunjukkan kode JavaScript Anda diharapkan menerima JSON tetapi malah mendapatkan sesuatu yang lain (mungkin HTML dalam bentuk kesalahan sisi server). Untuk memperbaiki masalah, Anda perlu memeriksa apa yang Anda dapatkan sebagai ganti JSON yang diharapkan untuk menentukan apa masalahnya.
Biasanya kesalahan ini disebabkan ketika server Anda mengembalikan HTML (yang biasanya dimulai dengan <DOCTYPE html>
atau <html>
), bukan JSON. JSON yang valid tidak dapat dimulai dengan karakter <
, sehingga pengurai JSON segera mengetahui bahwa data tersebut bukan JSON yang valid dan menghasilkan salah satu pesan kesalahan yang disebutkan di atas.
Untuk memperbaiki kesalahan ini, Anda perlu mencari tahu mengapa Anda mendapatkan HTML (atau yang lainnya) daripada JSON yang Anda harapkan. Untuk melakukan ini, Anda perlu mencatat data yang Anda coba uraikan ke konsol.
fetch()
Gunakan pendekatan ini jika kode Anda terlihat seperti ini:
fetch('https://example.com/some/path/to/json') .then(function (response) { return response.json(); }) .then(function (data) { // Do something with data });
Dalam hal ini kesalahan muncul ketika response.json()
mencoba menjalankan dan gagal mengurai data dari server sebagai JSON. Anda dapat menambahkan fungsi untuk menangani kesalahan dan menampilkan teks mentah dari isi respons dari server dan mencatatnya ke konsol (lihat catatan tentang baris komentar di bawah:
var responseClone; // 1 fetch('https://example.com/some/path/to/json') .then(function (response) { responseClone = response.clone(); // 2 return response.json(); }) .then(function (data) { // Do something with data }, function (rejectionReason) { // 3 console.log('Error parsing JSON from response:', rejectionReason, responseClone); // 4 responseClone.text() // 5 .then(function (bodyText) { console.log('Received the following instead of valid JSON:', bodyText); // 6 }); });
Berikut penjelasan setiap baris dengan komentar bernomor:
responseClone
diperlukan untuk memiliki klon dari objek response
karena isi response
hanya bisa dibaca sekali. Saat response.json()
dipanggil, isi response
asli dibaca, yang berarti tidak dapat dibaca lagi saat menangani kesalahan penguraian JSON. Saat mengkloning response
ke responseClone
, akan ada dua salinan isi respons yang dapat digunakan; satu di response
asli untuk digunakan dengan response.json()
dan satu lagi untuk digunakan dengan responseClone.text()
jika response.json()
gagal.responseClone
dengan klon dari respons yang diterima dari server.then()
yang mengikuti panggilan response.json()
. Fungsi kedua ini akan dipanggil jika janji dari response.json()
ditolak (yaitu kesalahan JSON ditemukan).rejectionReason
dari janji response.json()
yang ditolak dan responseClone
sehingga dapat diperiksa jika diperlukan (kode status HTTP sering berguna untuk debugging, misalnya).JSON.parse()
Gunakan metode ini jika kode yang memunculkan kesalahan terlihat seperti ini:
JSON.parse(data);
Dalam hal ini Anda dapat mencatat data ke konsol jika terjadi kesalahan untuk melihat isinya:
try { JSON.parse(data); } catch (error) { console.log('Error parsing JSON:', error, data); }
Setelah Anda dapat melihat data yang menyebabkan kesalahan penguraian JSON, diharapkan akan memberikan petunjuk mengapa Anda tidak mendapatkan JSON valid yang Anda harapkan. Beberapa masalah paling umum yang menyebabkan kesalahan ini adalah:
fetch()
dan pastikan itu benar.