Estou executando uma chamada AJAX no meu script MooTools, isso funciona bem no Firefox, mas no Chrome estou recebendo um Uncaught SyntaxError': Ficha inesperada :
erro, não consigo determinar porquê. Comentando código para determinar onde está o código ruim não rende nada, estou pensando que pode ser um problema com o JSON sendo devolvido. Ao verificar no console vejo que o JSON retornado é o seguinte:
{"votes":47,"totalvotes":90}
Eu não'não vejo nenhum problema com isso, por que este erro ocorreria?
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();
});
});
Isto acabou de acontecer comigo, e a razão não foi nenhuma das razões acima. Eu estava utilizando o comando jQuery getJSON e adicionando callback=?
para utilizar JSONP (como eu precisava ir cross-domain), e retornando o código JSON {"foo":"bar"}
e recebendo o erro.
Isto é porque eu deveria ter incluído os dados de retorno, algo como jQuery1720931400557777471107_1335958194322({"foo":"bar"})
Aqui está o código PHP que eu usei para conseguir isso, que se degrada se o JSON (sem uma chamada de retorno) for utilizado:
$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;
}
Esperemos que isso ajude alguém no futuro.
Eu acabei de resolver o problema. Havia algo a causar problemas com uma chamada de pedido padrão, por isso este é o código que usei em seu lugar:
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);
});
});
Se alguém sabe porque é que o objecto padrão do Request me estava a dar problemas, eu adoraria saber.