Yakalanmayan Sözdizimi Hatası: Beklenmeyen simge:


193

MooTools komut dosyamda bir AJAX çağrısı çalıştırıyorum, bu Firefox'ta iyi çalışıyor, ancak Chrome'da bir Uncaught SyntaxError: Unexpected token :hata alıyorum, nedenini belirleyemiyorum. Nerede kötü kod hiçbir şey verir belirlemek için kod yorum, bu JSON iade ile ilgili bir sorun olabilir düşünüyorum. Konsolda kontrol JSON iade bakın:

{"votes":47,"totalvotes":90}

Herhangi bir sorun görmüyorum, neden bu hata oluştu?

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();
  });
});

1
JSON gayet iyi. Sorun muhtemelen bunu nasıl ele alacağınızdır. Kodun gösterilmesi yardımcı olacaktır.
tcooc

1
Soruya kodun kısmı eklendi.
trobrock

Sözdizimi, JS veya JSON ile ilgili yanlış bir şey yok gibi görünüyor. HTML dahil olmak üzere jsfiddle.net üzerinde (değil) çalışan bir test-case yayınlamak yardımcı olacaktır.
Oskar Krawczyk

1
Şu anda internete bağlanıyorum, bu yüzden modemim göz attığım web sitelerinin HTML kaynağını sıkıştırıyor, bu yüzden gerçekten koddan kafa veya kuyruk yapamıyorum. Ancak, yeni başlayanlar için her JS kodunu harici dosyalara koyun - bu her zaman hata ayıklamayı kolaylaştırır - hatanın hava durumu JS veya başka bir şeyden kaynaklandığını bileceksiniz.
Oskar Krawczyk

2
"Beklenmeyen bir belirteç" büyük olasılıkla bazı geçersiz karakter kodlarıdır. Konsola yazdırdığınızda böyle bir kod görünmez. Bu nedenle, dizeyi birer birer yazdırın veya dizenin gerçek baytlarını görmek için bir protokol analizörü veya hata ayıklayıcı vb. Kullanın.
GroovyDotCom

Yanıtlar:


94

Kırmızı hataları görme

Yakalanmayan Sözdizimi Hatası: Beklenmeyen simge <

Chrome geliştiricinizin konsol sekmesindeki yanıt gövdesindeki HTML'nin bir göstergesidir.

Gerçekte gördüğünüz şey, tarayıcınızın <!DOCTYPE html>sunucudan beklenmeyen en üst satıra tepkisidir.


4
Soru söz konusu olduğunda neden "Beklenmeyen simge <" hakkında konuştuğunuz hakkında hiçbir fikrim yok Unexpected token :. Cevabınız OP'nin problemiyle tamamen alakasız.
Michał Perłakowski

1
Bunu nasıl düzeltebilirim? Chrome'da buna neden olan bir php yönlendirmesi var.
Yaşayanlar için Çalışıyor

7
@Andy_magoon'a eklemek için, benim durumumda, javascript sunması gereken bir komut dosyası etiketim vardı, ancak istek <! DOCTYPE html ile başlayan bir HTML sayfasına yönlendirildiğinden (bunun neden yeniden yönlendirildiği önemli değil). >, geçerli bir javascript olmayan HTML'yi JS olarak ayrıştırmaya çalıştığında tarayıcı SyntaxError öğesini döndürür.
david.barkhuizen

2
@Thom Düzeltmenin yolu, HTTP almanın, beklediğiniz HTML'yi değil, aradığınız javascript dosyasını döndürdüğünden emin olmaktır.
david.barkhuizen

1
Tam olarak bu hatayı aldım çünkü çıktı olduğu gibi dosya yolu yanlış ve komut dosyası etiketinde belirtilen dosyayı bulamıyor.
newman

80

Aynı sorunu olabilir insanlar için sadece bir FYI - Ben sadece sunucum uygulama / json olarak JSON geri göndermek zorunda kaldı ve varsayılan jQuery işleyici iyi çalıştı.


4
Sanırım bu sorunun tersini yaşıyorum. Bir üçüncü taraf API JSON talep ediyorum ve onlar yanıt olarak uygulama / javascript iade ve bu soruya bildirilen aynı hatayı alıyorum. Bununla nasıl başa çıkacağından emin değilim.
wuliwong

5
Garip bir sorun - yerel ana bilgisayarda iyi çalışıyor ancak sunucuda iyi çalışmıyor. Neden olduğu hakkında bir fikrin var mı?
VishwaKumar

Merhaba. Tam bir sorunum var ve çözemiyorum, birisi bana JSON'u sunucuya nasıl geri göndereceğinizi söyleyebilir mi
Alen

Teşekkürler Ben uygulama / javascript ( bu SO yanlış okuduğum gibi) gönderiyordu ve basit geçerli JSON bu hatayı alıyordu. Bunu değiştirmek application/jsonhatayı çözdü. JSONP kullanmıyorum.
scipilot

Hatta aynı hatayı alıyorum "Yakalanmayan SyntaxError: Beklenmedik simge:", json formatında {"success": true, "data": yanıtı aldıktan sonra bile
Rupali Pemare

41

Bu benim başıma geldi ve nedeni yukarıdaki sebeplerden hiçbiri değildi. JQuery getJSON komutunu kullanarak ve callback=?(etki alanları arasında gitmek için gerekli) JSONP kullanmak ekleyerek ve JSON kodu döndürme {"foo":"bar"}ve hata alıyorum.

Bunun nedeni, geri arama verilerini dahil etmem gerektiğiydi, jQuery17209314005577471107_1335958194322({"foo":"bar"})

JSON (geri arama olmadan) kullanılırsa bozulan, bunu başarmak için kullandığım PHP kodu:

$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; 
}

Umarım bu gelecekte birine yardım eder.


Bana çok yardımcı oldu. Jsonp yöntemini kullandığımızda json verilerini jsoncallback verileriyle sarmamız gerekir. Ayrıca jsonpcallback verileri sayılarla başlamamalıdır. Rakamlarla denediğimde işe yaramadı. Bu cevapta gösterilenle aynı formatta denediğimde işe yaradı ...
Ganesh Babu

Yeterince doğrudur, ancak hata aynıdır ve JSON kullanılıyorsa kod incelikle bozulur ve yine de çalışır.
Grim ...

Bu benim için AJAX, jQuery & JSONP ile çalıştı. Çok teşekkürler!
Piotr Wittchen

16

Sorunu yeni çözdüm. Standart bir istek çağrısı ile ilgili sorunlara neden olan bir şey vardı, bu yüzden bunun yerine kullandığım kod:

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);
  });
});

Standart Request nesnesinin bana neden problemler verdiğini bilen biri bilmek isterim.


3
standart istek ve request.json arasındaki fark çoğunlukla başlıklardadır, ekler this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});- şekil verin
Dimitar Christoff

Bu soruna neden olan şey garipti.
trobrock

3
$$Orada çifte ne var?
falsarella

@DimitarChristoff - $$ hakkında falsarella için herhangi bir cevap?
Ayı

1
@bear Çift dolar seçici MooTools'ta tanımlanmıştır.
Anthony Faull

10

Sorunumu ve çözümümü listeye ekleyeceğimi düşündüm.

Ben alıyordum: Uncaught SyntaxError: Unexpected token <ve hata ajax başarı ifadesinde bu satıra işaret ediyordu:

var total = $.parseJSON(response);

Daha sonra json sonuçlarına ek olarak, benim PHP bir hata vardı çünkü yanıt ile gönderilen HTML olduğunu bulundu. PHP'de bir hata aldığınızda büyük turuncu tablolarla sizi uyarmak için ayarlayabilirsiniz ve bu tablolar JSON atma ne vardı.

Bunu console.log(response)gerçekten ne gönderildiğini görmek için sadece bir yaparak öğrendim . JSON verileriyle ilgili bir sorun varsa, bir console.log veya neyin gönderildiğini ve nelerin alındığını görmenizi sağlayacak başka bir ifade yapıp yapamayacağınızı görmeye çalışın.


1
Bunu ben yaptım. Ben bir yerde inmy php dosyası json yankılanıyordu ve benim cevap php [// json veri] alıyordu ama ayrıştırmak mümkün değildi. Kendi hatamı bulabilmek için bunu paylaştığın için teşekkürler
Nicholas Decker

OP sorunu tamamen farklı. Sizin durumunuzda HTML'yi JSON olarak ayrıştırmaya çalışıyorsunuz ve OP'nin durumunda JSON'u JavaScript olarak ayrıştırmaya çalışıyor.
Michał Perłakowski

7

JSON dosyanızı istediğinizde, sunucu JSON Content-Type( text/javascript) yerine JavaScript üstbilgisi ( ) döndürür application/json.

MooTools belgelerine göre :

Javascript içerik türüne sahip yanıtlar otomatik olarak değerlendirilecektir.

Sonuç olarak MooTools, JSON'unuzu JavaScript olarak değerlendirmeye çalışır ve bu JSON'u değerlendirmeye çalıştığınızda:

{"votes":47,"totalvotes":90}

JavaScript, ayrıştırıcı olarak davranır {ve }bunun yerine bir obje simgelemi bir blok kapsamı olarak. Aşağıdaki "kod" un değerlendirilmesi ile aynıdır:

"votes":47,"totalvotes":90

Gördüğünüz gibi, :orada tamamen beklenmedik.

Çözüm, Content-TypeJSON dosyası için doğru üstbilgiyi ayarlamaktır . Uzantıyla .jsonkaydederseniz, sunucunuz bunu kendi başına yapmalıdır.


4

Yanıtınız bir şekilde değerlendiriliyor gibi görünüyor. Bu, Chrome'da aynı hatayı verir:

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

Bunun nedeni, '{...}' parantezlerinin javascript tarafından bir kod bloğu olarak yorumlanmasından kaynaklanmaktadır ve beklendiği gibi bir nesne değişmezidir.

Ben JSON.decode () işlevine bakmak ve orada bir eval olup olmadığını görmek.

Burada benzer sorun: Eval () = Beklenmeyen simge: hata


2

Hiçbir şey mantıklı değilse, bu hata aşağıdaki gibi html / javascript içine gömülü PHP Hatasından da kaynaklanabilir.

<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}

Değil <br />PHP ile html içine yerleştirilir kodunda vb hataya neden oluyor . Bu tür bir hatayı düzeltmek için (uyarıyı bastırın), başlangıçta bu kodu kullanın

error_reporting(E_ERROR | E_PARSE);

Görüntülemek için, sayfayı sağ tıklayın, "kaynağı görüntüle" yi tıklayın ve ardından bu hatayı tespit etmek için tam html'yi inceleyin.


1

Verileriniz yanlış json biçimine döndüğünde " yakalanmamış SyntaxError: Beklenmedik simge " hata görünümü, bazı durumlarda yanlış json biçiminiz olduğunu bilmiyorsunuz.
lütfen alert () ile kontrol edin; fonksiyon

onSuccess : function(resp){  
   alert(resp);  
}

alınan mesajınız: {"firstName": "John", "lastName": "Doe"} olmalıdır
ve aşağıdaki kodu kullanabilirsiniz

onSuccess : function(resp){  
   var j = JSON.decode(resp); // but in my case i'm using: JSON.parse(resp); 
}

"Hatasız SyntaxError: Beklenmedik belirteç " hatası ile
ancak yanlış json biçimini alırsanız
ex:

... {"firstName": "John", "lastName": "Doe"}

veya

Undefined variable: errCapt in .... on line<b>65</b><br/>{"firstName":"John", "lastName":"Doe"}

Yanlış json biçimine sahip olmanız için lütfen JSON.decode veya JSON.parse'dan önce düzeltin


3
Hata ayıklama console.log()yerine kullanmanızı öneririm alert().
Michał Perłakowski

1

Bu bana bugün de oldu. EF kullanıyordum ve AJAX çağrısına yanıt olarak bir Varlık döndürüyordum. Varlığımdaki sanal özellikler, sunucuda algılanmayan döngüsel bağımlılık hatasına neden oluyordu. Sanal özelliklere [ScriptIgnore] özniteliği eklenerek sorun giderildi.

ScriptIgnore özniteliğini kullanmak yerine, muhtemelen bir DTO döndürmek daha iyi olur.


1

Bunun nedeni, ekspres sunucumda herhangi bir 404'ü /#artı orijinal istek ne olursa olsun yönlendirmek için bir kural kurulumum olduğu için oldu. Açısal yönlendiricinin / js'nin isteği işlemesine izin verme. Bu yolu işlemek için js yolu yoksa /#/whatever, sunucuya bir istekte bulunulur;/ da tüm web sayfası .

Yani örneğin bir istekte bulunmak istedim /correct/somejsfile.jsama özledim yazdım /wrong/somejsfile.jsistek sunucuya yapılır. Bu konum / dosya mevcut olmadığından sunucu bir 302 location: /#/wrong/somejsfile.js. Tarayıcı yönlendirmeyi mutlu bir şekilde izler ve tüm web sayfası döndürülür. Tarayıcı sayfayı js olarak ayrıştırır ve

Yakalanmayan Sözdizimi Hatası: Beklenmeyen simge <

Bu nedenle, rahatsız edici yolu / isteği bulmanıza yardımcı olmak için 302 isteği arayın.

Umarım birine yardım eder.


1

Aynı sorunu vardı ve sunucudan dönen Json geçerli Json-P olmadığı ortaya çıktı. Aramayı çapraz alan adı olarak kullanmıyorsanız normal Json kullanın.


OP, JSONP değil JSON kullanır.
Michał Perłakowski

0

JSON'da yasadışı olan, olarak kodlanmış bir kayan nokta değerini de-serileştirmeye çalıştığımda " SyntaxError: Unexpected token I" aldım .jQuery.getJSON()InfinityINF


1
Bu soru "Beklenmeyen simge : " hakkındadır.
Michał Perłakowski

0

Benim durumumda, mvc denetleyicimdeki yanlış eşleme nedeniyle bahar mvc uygulamasını çalıştırırken aynı hatayla karşılaştım

@RequestMapping(name="/private/updatestatus")

yukarıdaki eşlemeyi değiştirdim

 @RequestMapping("/private/updatestatus")

veya

 @RequestMapping(value="/private/updatestatus",method = RequestMethod.GET)

0

Benim için, kaynağı Chrome tarayıcısının içindeki sayfaya görüntülediğimde ampul yanıyordu. Bir if ifadesinde fazladan bir parantezim vardı. Başarısız çizgide üzerinde haç bulunan kırmızı daireyi hemen göreceksiniz. Yakalanmayan Sözdizimi Hatası: Beklenmeyen belirteç, Chrome konsolunda ilk kez göründüğünde bir satır numarasına referans vermediğinden, oldukça yararsız bir hata mesajıdır.


0

Bunda yanlış yaptım

   `var  fs = require('fs');
    var fs.writeFileSync(file, configJSON);`

Zaten fsdeğişkeni intialized.Ama yine varikinci satıra koydu.Bu da bir hata veriyor ...


0

AngularJs 1.4.6 veya benzeri bu deneyimi olanlar için benim sorunum açısal benim şablon bulmak değil, çünkü verdiğim templateUrl(yolu) dosya bulunamadı. Sadece ulaşılabilir bir yol sağlamak zorunda kaldım ve sorun ortadan kalktı.


Ben aynı sorunu baseref url düzelterek çözüldü - kök klasöre işaret => <base href = "/">
Abdeali Chandanwala

0

Benim durumumda yanlış bir url (mevcut değil), bu yüzden belki de ikinci satırdaki 'gönder' diğer olmalı ...


0

Benim hatam tek / çift teklifi unutmaktı javascript url etrafında :

çok yanlış kod:

window.location = https://google.com;

ve doğru kod:

window.location = "https://google.com";

-2

Yakalanmayan Sözdizimi Hatası: Beklenmeyen simge}

Chrome bana bu örnek kod için hatayı verdi:

<div class="file-square" onclick="window.location = " ?dir=zzz">
    <div class="square-icon"></div>
    <div class="square-text">zzz</div>
</div>

ve onclick'i gibi sabitleyerek çözdü

... onclick="window.location = '?dir=zzz'" ...

Ancak hatanın sorunla ilgisi yoktur.


OP, "Beklenmeyen simge : " hakkında sorular sordu .
Michał Perłakowski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.