MooTools komut dosyamda bir AJAX çağrısı çalıştırıyorum, bu Firefox'ta iyi çalışıyor ancak Chrome'da Uncaught SyntaxError' hatası alıyorum: Unexpected token :
hatası alıyorum, nedenini belirleyemiyorum. Kötü kodun nerede olduğunu belirlemek için kodu yorumlamak hiçbir şey vermez, döndürülen JSON ile ilgili bir sorun olabileceğini düşünüyorum. Konsolda kontrol ettiğimde döndürülen JSON'un şu olduğunu görüyorum:
{"votes":47,"totalvotes":90}
Bununla ilgili herhangi bir sorun görmüyorum, bu hata neden oluşsun?
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();
});
});
Bu az önce benim başıma geldi ve nedeni yukarıdaki nedenlerden hiçbiri değildi. JQuery getJSON komutunu kullanıyordum ve JSONP kullanmak için callback=?
ekliyordum (etki alanları arasında geçiş yapmam gerektiğinden) ve JSON kodunu {"foo":"bar"}
döndürüyordum ve hatayı alıyordum.
Bunun nedeni, jQuery17209314005577471107_1335958194322({"foo":"bar"})
gibi bir geri arama verisi eklemem gerektiğidir.
İşte bunu başarmak için kullandığım PHP kodu, JSON (geri arama olmadan) kullanılırsa bozulur:
$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 birilerine yardımcı olur.
Az önce sorunu çözdüm. Standart bir Request çağrısında sorunlara neden olan bir şey vardı, bu yüzden bunun yerine kullandığım kod budur:
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 sorun çıkardığını bilen varsa bilmek isterim.