V mojom skripte MooTools spúšťam volanie AJAX, vo Firefoxe to funguje dobre, ale v prehliadači Chrome dostávam hlásenie `Uncaught SyntaxError: Nedokážem určiť prečo. Komentovanie kódu s cieľom určiť, kde je zlý kód, nič neprináša, myslím si, že to môže byť problém s JSON, ktorý sa vracia. Pri kontrole v konzole vidím, že vrátený JSON je tento:
{"votes":47,"totalvotes":90}
Nevidím v tom žiadne problémy, prečo by sa mala vyskytnúť táto chyba?
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();
});
});
Práve sa mi to stalo a dôvodom nebol žiadny z vyššie uvedených dôvodov. Používal som príkaz getJSON od jQuery a pridal som callback=?
, aby som použil JSONP (keďže som potreboval ísť cez doménu), a vrátil som kód JSON {"foo":"bar"}
a dostal som chybu.
Je to preto, že som mal zahrnúť údaje spätného volania, niečo ako jQuery17209314005577471107_1335958194322({"foo":"bar"})
Tu je kód PHP, ktorý som použil na dosiahnutie tohto cieľa a ktorý sa zhorší, ak sa použije JSON (bez spätného volania):
$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;
}
Dúfam, že to niekomu v budúcnosti pomôže.
Problém som práve vyriešil. Niečo spôsobovalo problémy so štandardným volaním Request, takže som namiesto toho použil tento kód:
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);
});
});
Ak niekto vie, prečo mi štandardný objekt Request robil problémy, rád by som to vedel.