Ik voer een AJAX oproep uit in mijn MooTools script, dit werkt prima in Firefox maar in Chrome krijg ik een Uncaught SyntaxError: Unexpected token :
foutmelding, ik kan niet bepalen waarom. Het uitcommentariëren van code om te bepalen waar de slechte code zit levert niets op, ik denk dat het een probleem kan zijn met de JSON die wordt geretourneerd. Als ik in de console kijk, zie ik dat de JSON die wordt teruggestuurd het volgende is:
{"votes":47,"totalvotes":90}
Ik zie er geen problemen mee, waarom zou deze fout optreden?
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();
});
});
Dit is net gebeurd met mij, en de reden was geen van de bovenstaande redenen. Ik gebruikte het jQuery commando getJSON en voegde callback=?
toe om JSONP te gebruiken (omdat ik cross-domain moest gaan), en retourneerde de JSON code {"foo":"bar"}
en kreeg de foutmelding.
Dit komt omdat ik de callback data had moeten toevoegen, iets als jQuery17209314005577471107_1335958194322({"foo":"bar"})
.
Hier is de PHP code die ik heb gebruikt om dit te bereiken, die afbreekt als JSON (zonder callback) wordt gebruikt:
$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;
}
Hopelijk helpt dat iemand in de toekomst.
Ik heb zojuist het probleem opgelost. Er was iets dat problemen veroorzaakte met een standaard Request oproep, dus dit is de code die ik in plaats daarvan heb gebruikt:
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);
});
});
Als iemand weet waarom het standaard Request object problemen gaf, zou ik dat graag willen weten.