Jeg kører et AJAX-kald i mit MooTools-script, og det fungerer fint i Firefox, men i Chrome får jeg en Uncaught SyntaxError: Unexpected token :
fejl, jeg kan ikke bestemme hvorfor. Kommenterer ud kode for at bestemme, hvor den dårlige kode er giver intet, jeg tænker, at det kan være et problem med JSON, der returneres. Ved at tjekke i konsollen kan jeg se, at den returnerede JSON er denne:
{"votes":47,"totalvotes":90}
Jeg kan ikke se nogen problemer med det, hvorfor skulle denne fejl opstå?
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();
});
});
Det er lige sket for mig, og årsagen var ingen af de ovennævnte årsager. Jeg brugte jQuery-kommandoen getJSON og tilføjede callback=?
for at bruge JSONP (da jeg havde brug for at gå på tværs af domæner) og returnerede JSON-koden {"foo":"bar"}
og fik fejlen.
Dette skyldes, at jeg skulle have inkluderet callback-data, noget i retning af jQuery1720209319400557747471107_1335958194322({"foo":"bar"})
Her er den PHP-kode, jeg brugte til at opnå dette, som forringes, hvis JSON (uden callback) bruges:
$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;
}
Forhåbentlig kan det hjælpe nogen i fremtiden.
Jeg har netop løst problemet. Der var noget, der forårsagede problemer med et standard Request call, så dette er den kode, jeg brugte i stedet:
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);
});
});
Hvis nogen ved, hvorfor standard Request-objektet gav mig problemer, vil jeg meget gerne vide det.