Saya menjalankan AJAX memanggil saya MooTools script ini bekerja dengan baik di Firefox tapi di Chrome saya mendapatkan Tertangkap SyntaxError: Unexpected token :
kesalahan, saya tidak bisa menentukan mengapa. Komentar keluar kode untuk menentukan di mana kode yang buruk adalah hasil apa-apa, saya berpikir mungkin ada masalah dengan JSON dikembalikan. Memeriksa di konsol saya melihat JSON yang dikembalikan adalah ini:
{"votes":47,"totalvotes":90}
Saya don't melihat ada masalah dengan hal itu, mengapa kesalahan ini terjadi?
vote.each(function(e){
e.set('send', {
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = JSON.decode(resp);
if (!j) return false;
var restaurant = e.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
});
e.addEvent('submit', function(e){
e.stop();
this.send();
});
});
Melihat kesalahan merah
Tertangkap SyntaxError: Unexpected token <
di Chrome developer's konsol tab sering merupakan indikasi Pengalihan 301 yang bisa disebabkan oleh memiliki aturan yang aneh pada anda .file htaccess.
Apa yang anda're-benar melihat apakah browser anda's reaksi tak terduga atas garis <!DOCTYPE html>
dari server.
Hal ini hanya terjadi pada saya, dan alasannya adalah tidak satupun dari alasan-alasan di atas. Saya menggunakan perintah jQuery getJSON dan menambahkan callback=?
untuk menggunakan JSONP (seperti yang saya butuhkan untuk pergi cross-domain), dan mengembalikan kode JSON {"anu":"bar"}
, dan mendapatkan kesalahan.
Hal ini karena saya harus disertakan data callback, sesuatu seperti jQuery17209314005577471107_1335958194322({"anu":"bar"})
Berikut ini adalah kode PHP yang saya digunakan untuk mencapai hal ini, yang menurunkan jika JSON (tanpa callback) ini digunakan:
$ret['foo'] = "bar";
finish();
function finish() {
header("content-type:application/json");
if ($_GET['callback']) {
print $_GET['callback']."(";
}
print json_encode($GLOBALS['ret']);
if ($_GET['callback']) {
print ")";
}
exit;
}
Mudah-mudahan itu akan membantu seseorang di masa depan.
Aku hanya memecahkan masalah. Ada sesuatu yang menyebabkan masalah dengan Permintaan standar panggilan, jadi ini adalah kode yang saya digunakan:
vote.each(function(element){
element.addEvent('submit', function(e){
e.stop();
new Request.JSON({
url : e.target.action,
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = resp;
if (!j) return false;
var restaurant = element.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
}).send(this);
});
});
Jika ada yang tahu mengapa Permintaan standar benda itu memberikan saya masalah saya akan senang untuk tahu.
Saya pikir saya'd add saya masalah dan resolusi untuk daftar.
Saya mendapatkan: Tertangkap SyntaxError: Unexpected token <
dan kesalahan itu menunjuk ke baris ini di ajax sukses pernyataan:
var total = $.parseJSON(response);
Saya kemudian menemukan bahwa selain json hasil, ada HTML yang dikirim dengan respon karena saya punya kesalahan di PHP saya. Ketika anda mendapatkan pesan error di PHP, anda dapat mengatur hal ini untuk memperingatkan anda dengan jeruk besar meja dan meja-meja itu apa yang melemparkan JSON.
Saya menemukan bahwa dengan hanya melakukan konsol.log(respon)
dalam rangka untuk melihat apa yang sebenarnya sedang dikirim. Jika itu's masalah dengan data JSON, hanya mencoba untuk melihat jika anda dapat melakukan konsol.log atau beberapa pernyataan yang akan memungkinkan anda untuk melihat apa yang dikirim dan yang diterima.
Ketika anda meminta anda JSON file, server mengembalikan JavaScript Content-Type
header (text/javascript
) bukan JSON (application/json
).
Menurut MooTools docs:
Tanggapan dengan javascript content-type akan dievaluasi secara otomatis.
Dalam hasil MooTools mencoba untuk mengevaluasi JSON seperti JavaScript, dan ketika anda mencoba untuk mengevaluasi seperti JSON:
{"votes":47,"totalvotes":90}
seperti JavaScript, parser memperlakukan {
dan }
sebagai sebuah blok lingkup bukannya object notation. Hal ini sama seperti evaluasi sebagai berikut "kode":
"votes":47,"totalvotes":90
Seperti yang anda lihat, :
ini benar-benar tak terduga di sana.
Solusinya adalah untuk mengatur benar Content-Type
header untuk file JSON. Jika anda menyimpannya dengan .json
ekstensi, server anda harus melakukannya dengan sendirinya.
Kedengarannya seperti anda respon yang sedang dievaluasi entah bagaimana. Hal ini memberikan kesalahan yang sama di Chrome:
var resp = '{"votes":47,"totalvotes":90}';
eval(resp);
Hal ini disebabkan karena kawat gigi '{...}' ditafsirkan oleh javascript sebagai blok kode dan bukan objek literal sebagai salah satu mungkin harapkan.
Saya akan melihat JSON.decode() fungsi dan lihat jika ada eval di sana.
Masalah serupa di sini: https://stackoverflow.com/questions/7985450/eval-unexpected-token-error
Jika tidak ada yang masuk akal, kesalahan ini juga dapat disebabkan oleh Error PHP yang tertanam di dalam html/javascript, seperti salah satu di bawah ini
<br />
<b>Deprecated</b>: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in <b>C:\Projects\rwp\demo\en\super\ge.php</b> on line <b>54</b><br />
var zNodes =[{ id:1, pId:0, name:"ACE", url: "/ace1.php", target:"_self", open:true}
Bukan <br />
dll di kode yang disisipkan ke dalam html dengan PHP menyebabkan kesalahan. Untuk memperbaiki kesalahan semacam ini (menekan peringatan), digunakan kode ini di mulai
error_reporting(E_ERROR | E_PARSE);
Untuk melihat, klik kanan pada halaman, "lihat sumber" dan kemudian memeriksa html lengkap untuk melihat kesalahan ini.
Hal ini terjadi pada saya hari ini juga. Saya menggunakan EF dan kembali suatu Entitas dalam menanggapi panggilan AJAX. Virtual properti pada entitas saya menyebabkan siklus ketergantungan kesalahan yang tidak terdeteksi pada server. Dengan menambahkan [ScriptIgnore] atribut pada virtual properties, masalah itu tetap.
Alih-alih menggunakan ScriptIgnore atribut, mungkin akan lebih baik untuk hanya kembali DTO.
"Uncaught SyntaxError: Unexpected token" kesalahan penampilan saat data anda kembali salah format json, dalam beberapa kasus, anda don't tahu anda punya salah format json. silakan cek dengan alert(); fungsi
onSuccess : function(resp){
alert(resp);
}
pesan yang diterima harus: {"nama depan":"John", "lastName":"Doe"} dan kemudian anda dapat menggunakan kode di bawah ini
onSuccess : function(resp){
var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp);
}
dengan keluar error "Uncaught SyntaxError: Unexpected token" tetapi jika anda mendapatkan salah format json ex:
...{"nama depan":"John", "lastName":"Doe"}
atau
Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}
sehingga anda punya salah format json, segera memperbaikinya sebelum anda JSON.men-decode atau JSON.mengurai
Ini terjadi karena saya memiliki aturan setup di server express dengan rute setiap 404 kembali ke /#
ditambah dengan permintaan yang asli itu. Memungkinkan sudut router/js untuk menangani permintaan. Jika ada's tidak ada js rute untuk menangani jalan itu, permintaan untuk /#/apapun
yang dibuat ke server, yang hanya permintaan untuk /
, seluruh halaman web.
Jadi misalnya jika saya ingin membuat permintaan untuk /correct/somejsfile.js
tapi aku rindu diketik ke /wrong/somejsfile.js
request yang dibuat untuk server. Bahwa lokasi/file tidak ada, sehingga server merespon dengan 302 lokasi: /#/wrong/somejsfile.js
. Browser dengan senang hati mengikuti mengarahkan dan seluruh halaman web kembali. Browser mem-parsing halaman seperti js dan anda dapatkan
Tertangkap SyntaxError: Unexpected token <
Jadi untuk membantu menemukan menyinggung path/permintaan mencari 302 permintaan.
Harapan yang membantu seseorang.
Dalam kasus saya, saya berlari ke dalam kesalahan yang sama, saat menjalankan spring mvc aplikasi karena salah pemetaan di mvc controller
@RequestMapping(name="/private/updatestatus")
aku berubah di atas pemetaan untuk
@RequestMapping("/private/updatestatus")
atau
@RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)
Bagi saya lampu pergi ketika saya lihat sumber untuk halaman dalam browser Chrome. Aku punya tambahan braket dalam if pernyataan. Anda'll segera melihat lingkaran merah dengan salib di atasnya pada gagal baris. It's agak membantu pesan kesalahan, karena yang Tertangkap Kesalahan Sintaks: Unexpected token tidak membuat referensi ke nomor baris ketika pertama kali muncul di konsol Chrome.
Bagi mereka yang mengalami hal ini dalam AngularJs 1.4.6 atau mirip, masalah saya dengan sudut tidak menemukan template saya karena file di templateUrl
(path) yang saya berikan tidak't dapat ditemukan. Aku hanya harus memberikan yang dicapai jalan dan masalah pergi.
Saya tidak Salah dalam hal ini
`var fs = require('fs');
var fs.writeFileSync(file, configJSON);`
Sudah saya intialized yang fs
variabel.Tapi sekali lagi saya menempatkan var
di baris kedua.Yang satu ini juga memberikan semacam itu kesalahan...
Uncaught SyntaxError: Unexpected token }
Chrome gaved saya kesalahan ini untuk contoh kode:
<div class="file-square" onclick="window.location = " ?dir=zzz">
<div class="square-icon"></div>
<div class="square-text">zzz</div>
</div>
dan soal itu memperbaiki onclick untuk menjadi seperti
... onclick="window.location = '?dir=zzz'" ...
Tapi kesalahan tidak ada hubungannya dengan masalah..