Dalam komponen aplikasi Bereaksi yang menangani umpan konten seperti Facebook, saya mengalami kesalahan:
Feed.js: 94 tidak terdefinisi "parsererror" "Sintaksaksir: Token tak terduga <dalam JSON di posisi 0
Saya mengalami kesalahan serupa yang ternyata menjadi kesalahan ketik pada HTML di dalam fungsi render, tapi sepertinya tidak demikian di sini.
Lebih membingungkan lagi, saya menggulirkan kode kembali ke versi yang sebelumnya dikenal bekerja dan saya masih mendapatkan kesalahan.
Feed.js:
import React from 'react';
var ThreadForm = React.createClass({
getInitialState: function () {
return {author: '',
text: '',
included: '',
victim: ''
}
},
handleAuthorChange: function (e) {
this.setState({author: e.target.value})
},
handleTextChange: function (e) {
this.setState({text: e.target.value})
},
handleIncludedChange: function (e) {
this.setState({included: e.target.value})
},
handleVictimChange: function (e) {
this.setState({victim: e.target.value})
},
handleSubmit: function (e) {
e.preventDefault()
var author = this.state.author.trim()
var text = this.state.text.trim()
var included = this.state.included.trim()
var victim = this.state.victim.trim()
if (!text || !author || !included || !victim) {
return
}
this.props.onThreadSubmit({author: author,
text: text,
included: included,
victim: victim
})
this.setState({author: '',
text: '',
included: '',
victim: ''
})
},
render: function () {
return (
<form className="threadForm" onSubmit={this.handleSubmit}>
<input
type="text"
placeholder="Your name"
value={this.state.author}
onChange={this.handleAuthorChange} />
<input
type="text"
placeholder="Say something..."
value={this.state.text}
onChange={this.handleTextChange} />
<input
type="text"
placeholder="Name your victim"
value={this.state.victim}
onChange={this.handleVictimChange} />
<input
type="text"
placeholder="Who can see?"
value={this.state.included}
onChange={this.handleIncludedChange} />
<input type="submit" value="Post" />
</form>
)
}
})
var ThreadsBox = React.createClass({
loadThreadsFromServer: function () {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function (data) {
this.setState({data: data})
}.bind(this),
error: function (xhr, status, err) {
console.error(this.props.url, status, err.toString())
}.bind(this)
})
},
handleThreadSubmit: function (thread) {
var threads = this.state.data
var newThreads = threads.concat([thread])
this.setState({data: newThreads})
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: thread,
success: function (data) {
this.setState({data: data})
}.bind(this),
error: function (xhr, status, err) {
this.setState({data: threads})
console.error(this.props.url, status, err.toString())
}.bind(this)
})
},
getInitialState: function () {
return {data: []}
},
componentDidMount: function () {
this.loadThreadsFromServer()
setInterval(this.loadThreadsFromServer, this.props.pollInterval)
},
render: function () {
return (
<div className="threadsBox">
<h1>Feed</h1>
<div>
<ThreadForm onThreadSubmit={this.handleThreadSubmit} />
</div>
</div>
)
}
})
module.exports = ThreadsBox
Di alat pengembang Chrome, kesalahan tampaknya berasal dari fungsi ini:
loadThreadsFromServer: function loadThreadsFromServer() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function (data) {
this.setState({ data: data });
}.bind(this),
error: function (xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
dengan garis yang console.error(this.props.url, status, err.toString()
digarisbawahi.
Karena sepertinya kesalahannya ada hubungannya dengan menarik data JSON dari server, saya mencoba mulai dari db kosong, tetapi kesalahan tetap ada. Kesalahan tampaknya disebut dalam infinite loop mungkin karena Bereaksi terus menerus mencoba untuk terhubung ke server dan akhirnya crash browser.
EDIT:
Saya telah memeriksa respons server dengan alat dev Chrome dan klien REST Chrome, dan data tampaknya JSON yang tepat.
EDIT 2:
Tampaknya meskipun titik akhir API yang dimaksudkan memang mengembalikan data dan format JSON yang benar, Bereaksi melakukan polling dan http://localhost:3000/?_=1463499798727
bukan yang diharapkan http://localhost:3001/api/threads
.
Saya menjalankan server hot-reload webpack pada port 3000 dengan aplikasi ekspres berjalan pada port 3001 untuk mengembalikan data backend. Yang membuat frustrasi di sini adalah bahwa ini berfungsi dengan benar saat terakhir kali saya mengerjakannya dan tidak dapat menemukan apa yang bisa saya ubah untuk memecahkannya.
sumber
JSON.parse("<foo>")
- string JSON (yang Anda harapkandataType: 'json'
) tidak dapat dimulai dengan<
.NODE_ENV
. Lihat ini: github.com/facebookincubator/create-react-app/blob/master/…Jawaban:
Kata-kata dari pesan kesalahan sesuai dengan apa yang Anda dapatkan dari Google Chrome saat Anda menjalankan
JSON.parse('<...')
. Saya tahu Anda mengatakan server sedang diaturContent-Type:application/json
, tetapi saya dituntun untuk percaya bahwa badan tanggapan sebenarnya HTML.Itu
err
benar-benar dilemparkan ke dalamjQuery
, dan diteruskan kepada Anda sebagai variabelerr
. Alasan bahwa garis digarisbawahi adalah hanya karena di situlah Anda mencatatnya.Saya menyarankan agar Anda menambahkan ke log Anda. Melihat properti aktual
xhr
(XMLHttpRequest) untuk mempelajari lebih lanjut tentang respons. Coba tambahkanconsole.warn(xhr.responseText)
dan Anda kemungkinan besar akan melihat HTML yang sedang diterima.sumber
console.warn(jqxhr.responseText)
. Itu sangat membantu dalam mendiagnosis masalah saya.console.log
,console.warn
danconsole.error
semua akan menulis untuk Console Anda. Namun, Konsol biasanya akan memberikan opsi Filter Logging, jadi pastikan bahwa itu diaktifkan atau dinonaktifkan sesuai keinginan Anda.Anda menerima HTML (atau XML) kembali dari server, tetapi
dataType: json
memberitahu jQuery untuk menguraikan sebagai JSON. Periksa tab "Jaringan" di alat Chrome dev untuk melihat konten respons server.sumber
@Produces(MediaType.APPLICATION_JSON)
Ini akhirnya menjadi masalah izin bagi saya. Saya mencoba mengakses url yang tidak saya miliki otorisasinya dengan cancan, jadi url dialihkan ke
users/sign_in
. url yang diarahkan merespons ke html, bukan json. Karakter pertama dalam respons html adalah<
.sumber
Saya mengalami kesalahan ini "SyntaxError: Token tak terduga m di JSON di posisi", di mana token 'm' dapat berupa karakter lain.
Ternyata saya melewatkan salah satu tanda kutip ganda di objek JSON ketika saya menggunakan RESTconsole untuk tes DB, seperti {"name:" math "}, yang benar adalah {" name ":" math "}
Butuh banyak usaha untuk mencari tahu kesalahan canggung ini. Saya takut orang lain akan bertemu dengan gelandangan serupa.
sumber
Dalam kasus saya, saya mendapatkan ini menjalankan webpack, dan ternyata ada beberapa korupsi di suatu tempat di dir node_modules lokal.
... sudah cukup untuk membuatnya berfungsi kembali.
sumber
Saya kasus saya kesalahan adalah hasil dari saya tidak menetapkan nilai kembali ke variabel. Berikut ini menyebabkan pesan kesalahan:
Saya mengubahnya menjadi:
Tanpa variabel JSON tidak dapat memformat data dengan benar.
sumber
Kesalahan ini terjadi ketika Anda mendefinisikan respons sebagai
application/json
dan Anda mendapatkan HTML sebagai respons. Pada dasarnya, ini terjadi ketika Anda menulis skrip sisi server untuk url tertentu dengan respons JSON tetapi format kesalahan dalam HTML.sumber
Pastikan respons dalam format JSON jika tidak akan memicu kesalahan ini.
sumber
saya menghadapi masalah yang sama
saya menghapus dataType: 'json' dari metode $ .ajax
sumber
Saya memiliki pesan kesalahan yang sama setelah tutorial. Masalah kami tampaknya adalah 'url: this.props.url' dalam panggilan ajax. Di React.DOM ketika Anda membuat elemen Anda, milik saya terlihat seperti ini.
Nah, Kotak Komentar ini tidak memiliki url dalam alat peraga, hanya data. Ketika saya beralih
url: this.props.url
->url: this.props.data
, itu membuat panggilan yang benar ke server dan saya mendapatkan kembali data yang diharapkan.Saya harap ini membantu.
sumber
Masalah saya adalah bahwa saya mendapatkan kembali data
string
yang tidak dalam format JSON yang tepat, yang kemudian saya coba parsing.simple example: JSON.parse('{hello there}')
akan memberikan kesalahan pada jam. Dalam kasus saya, url callback mengembalikan karakter yang tidak perlu sebelum objek:employee_names([{"name":....
dan mendapatkan error at e pada 0. URL callback saya sendiri memiliki masalah yang ketika diperbaiki, hanya mengembalikan objek.sumber
Dalam kasus saya, untuk situs 2/4 Azure host Angular, panggilan API saya ke mySite / api / ... dialihkan karena masalah routing mySite. Jadi, itu mengembalikan HTML dari halaman yang diarahkan alih-alih api JSON. Saya menambahkan pengecualian dalam file web.config untuk jalur api.
Saya tidak mendapatkan kesalahan ini ketika mengembangkan secara lokal karena Situs dan API berada di port yang berbeda. Mungkin ada cara yang lebih baik untuk melakukan ini ... tetapi berhasil.
sumber
Ini mungkin sudah tua. Tapi, itu hanya terjadi dalam sudut, jenis konten untuk permintaan dan tanggapan berbeda dalam kode saya. Jadi, periksa tajuk untuk,
dalam Bereaksi aksioma
jQuery Ajax:
sumber
Setelah menghabiskan banyak waktu dengan ini, saya menemukan bahwa dalam kasus saya masalahnya adalah memiliki "beranda" yang didefinisikan pada file package.json saya membuat aplikasi saya tidak berfungsi pada firebase (kesalahan 'token' yang sama). Saya membuat aplikasi reaksi saya menggunakan aplikasi create-react-app, kemudian saya menggunakan panduan firebase pada file READ.me untuk menyebar ke halaman github, menyadari bahwa saya harus melakukan pekerjaan ekstra agar router dapat bekerja, dan beralih ke firebase. panduan github telah menambahkan kunci beranda pada package.json dan menyebabkan masalah penyebaran.
sumber
Protip: Menguji json di server Node.js lokal? Pastikan Anda belum memiliki sesuatu yang merutekan ke jalur itu
sumber
Pada tingkat umum kesalahan ini terjadi ketika objek JSON diuraikan yang memiliki kesalahan sintaksis di dalamnya. Pikirkan sesuatu seperti ini, di mana properti pesan berisi tanda kutip ganda yang tidak terhapuskan:
Jika Anda memiliki JSON di aplikasi Anda di suatu tempat maka ada baiknya menjalankannya melalui JSONLint untuk memverifikasi bahwa ia tidak memiliki kesalahan sintaksis. Biasanya ini tidak terjadi meskipun dalam pengalaman saya, biasanya JSON dikembalikan dari API yang menjadi penyebabnya.
Ketika permintaan XHR dibuat ke API HTTP yang mengembalikan respons dengan a
Content-Type:application/json; charset=UTF-8
tajuk yang berisi JSON tidak valid di badan respons Anda akan melihat kesalahan ini.Jika pengontrol API sisi-server tidak benar menangani kesalahan sintaks, dan sedang dicetak sebagai bagian dari respons, itu akan merusak struktur JSON yang dikembalikan. Contoh yang baik dari hal ini adalah respons API yang berisi Peringatan atau Pemberitahuan PHP di badan respons:
95% dari waktu ini adalah sumber masalah bagi saya, dan meskipun agak dibahas di sini dalam tanggapan lain saya tidak merasa itu dijelaskan dengan jelas. Semoga ini bisa membantu, jika Anda mencari cara praktis untuk melacak respons API mana yang mengandung kesalahan sintaks JSON, saya telah menulis modul Angular untuk itu .
Berikut modulnya:
Rincian lebih lanjut dapat ditemukan di artikel blog yang dirujuk di atas, saya belum memposting semua yang ditemukan di sini karena mungkin tidak semua relevan.
sumber
Bagi saya, ini terjadi ketika salah satu properti pada objek yang saya kembali sebagai JSON melemparkan pengecualian.
Menambahkan cek nol, perbaiki untuk saya:
sumber
hanya sesuatu yang mendasar untuk diperiksa, pastikan Anda tidak memiliki komentar di file json
sumber
Hanya untuk menambah jawaban, itu juga terjadi ketika respons API Anda termasuk
yang bisa menjadi kasus ketika backend Anda menggunakan PHP.
sumber
Dalam python Anda dapat menggunakan json.Dump (str) sebelum mengirim hasil ke templat html. dengan string perintah ini dikonversi ke format json yang benar dan kirim ke templat html. Setelah mengirim hasil ini ke JSON.parse (hasil), ini adalah jawaban yang benar dan Anda dapat menggunakan ini.
sumber
Untuk beberapa orang, ini dapat membantu kalian: Saya memiliki pengalaman yang sama dengan Wordpress REST API. Saya bahkan menggunakan tukang pos untuk memeriksa apakah saya memiliki rute atau titik akhir yang benar. Saya kemudian mengetahui bahwa saya tidak sengaja memasukkan "echo" ke dalam skrip saya - kait:
Debug & periksa konsol Anda
Penyebab kesalahan
Jadi pada dasarnya, ini berarti bahwa saya mencetak nilai yang bukan JSON yang dicampur dengan skrip yang menyebabkan kesalahan AJAX - "SyntaxError: Token tak terduga di JSON di posisi 0"
sumber
Ini mungkin disebabkan karena kode javascript Anda melihat beberapa respons json dan Anda menerima sesuatu yang lain seperti teks.
sumber
Saya mengalami masalah yang sama. Saya menggunakan server node.js sederhana untuk mengirim respons ke klien yang dibuat dalam Angular 7. Awalnya saya mengirim response.end ('Halo dunia dari server nodejs'); ke klien tetapi entah bagaimana sudut tidak dapat menguraikannya.
sumber
Mereka yang menggunakan
create-react-app
dan mencoba mengambil file json lokal.Seperti dalam
create-react-app
,webpack-dev-server
digunakan untuk menangani permintaan dan untuk setiap permintaan itu melayaniindex.html
. Jadi, Anda mendapatkanUntuk mengatasi ini, Anda perlu mengeluarkan aplikasi dan memodifikasi
webpack-dev-server
file konfigurasi.Anda dapat mengikuti langkah-langkah dari sini .
sumber
Dalam kasus saya (backend), saya menggunakan res.send (token);
Semuanya diperbaiki ketika saya mengubah ke kirim ulang (data);
Anda mungkin ingin memeriksa ini jika semuanya berfungsi dan memposting sebagaimana dimaksud, tetapi kesalahan terus muncul di front-end Anda.
sumber
Kemungkinan untuk kesalahan ini sangat besar.
Dalam kasus saya, saya menemukan bahwa masalah tersebut menambah masalah yang
homepage
diajukanpackage.json
.Layak diperiksa: dalam
package.json
perubahan:untuk
sumber
Singkatnya, jika Anda mendapatkan kesalahan ini atau kesalahan serupa, itu berarti hanya satu hal. Yaitu, di suatu tempat di basis kode kami, kami mengharapkan format JSON yang valid untuk diproses dan kami tidak mendapatkannya. Sebagai contoh:
Akan melempar kesalahan, mengatakan
Karena, karakter pertama di
string
iss
& itu bukan JSON yang valid sekarang. Ini bisa melempar kesalahan di antara juga. Suka:Akan melempar kesalahan:
karena kami sengaja melewatkan kutipan di string JSON
invalidJSON
di posisi 36.Dan jika Anda memperbaikinya:
akan memberi Anda objek di JSON.
Sekarang, kesalahan ini dapat dilemparkan ke sembarang tempat & di kerangka / pustaka apa pun. Sebagian besar waktu Anda mungkin membaca respons jaringan yang bukan JSON valid. Jadi langkah-langkah debug masalah ini bisa seperti:
curl
atau tekan API yang sebenarnya Anda panggil.JSON.parse
. Jika Anda mendapatkan kesalahan, perbaiki.sumber
Jika ada orang lain yang menggunakan fetch dari dokumentasi "Menggunakan Fetch" di Web API di Mozilla: (Ini benar-benar berguna: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch )
Ini ada di dalam fungsi:
Saya menggunakan fungsi
qr
yang saya yakini sebagai objek karenaqr
terlihat seperti ini:{"name": "Jade", "lname": "Bet", "pet":"cat"}
tetapi saya terus mendapatkan kesalahan sintaksis. Ketika saya menugaskannya untuk sesuatu yang lain:let qrdata = qr;
itu berhasil.sumber
Solusi sederhana untuk kesalahan ini adalah menulis komentar dalam
styles.less
file.sumber
styles.less
file mungkin bisa menyelesaikan apa yang tampaknya menjadi masalah kode server back-end.