Bonjour,
J'ai réalisé un code qui normalement devrait m'actualiser un systeme de notation dès que j'ai selectionné ma note.
Test : je sauvegarde mon code, et je vais sur ma page. Je selectionne une note, ca ne marche pas, je reclique et là ca marche ! Je regarde dans ma bdd, et petit hic, le nombre de votes est supérieur de 1 au nombre de vote affiché à côté de mon systeme de notation. Où me suis je trompé?
Le problème j'en suis sûr vient de location.reload();
$(function(){
$('.star').on('mouseover', function(){
var indice = $('.star').index(this);
$('.star').removeClass('full');
for(var i = 0; i<= indice; i++){
$('.star:eq('+i+')').addClass('full');
}
});
$('.star').on('mouseout', function(){
$('.star').removeClass('full');
});
var average = $('.average').attr('data-average');
function avaliacao(average){
average = (Number(average)*20);
$('.barra .bg').css('width', 0);
$('.barra .bg').animate({width: average+'%'}, 500);
}
avaliacao(average);
$('.star').on('click', function(){
var artigoId = $('.artigoDados').attr('data-id');
var ponto = $(this).attr('id');
location.reload();
$.post('sys/votar.php',{votar: 'sim', artigo: artigoId, ponto: ponto}, function(retorno){
avaliacao(retorno.average);
$('p.votos span').html(retorno.votos);
}, 'jSON');
});
});
Effectivement, je crois aussi que ce soit ton location.reload() qui pose problème.
Déjà je trouve assez bizarre de placer un location.# au même niveau qu'une promesse. Parce que dans le meilleure des cas ta promesse trouve un retour à temps mais dans la plupart des cas elle aura pas le temps de revenir que ton reload se sera dejà lancé.
Donc pour moi il faut déjà commencer par restructurer ton code pour attendre la réponse de la promesse et ensuite recharger. Quelque chose comme:
$.post('sys/votar.php',..., function(retorno){
// ton execution.
// et le reload
location.reload;
}, 'jSON');
Mais d'ailleurs... Il sert à quoi ce reload? T'es en js t'as pas besoin de reload pour changer la note moyenne!?