Не отправляйте ajax-запросы и не запускайте анимацию с setInterval
, setInterval
не допускает медленных браузеров / сетей или сбоев сетевого подключения. Вместо этого используйте setTimeout
.
Также $(document).ready(doAjax());
должно быть $(document).ready(doAjax);
jQuery(document).ready(doAjax);
function doAjax() {
jQuery.ajax({
async: false,
type: "POST",
url: "counterData.php",
dataType: "json",
cache: false,
success: function(data) {
doTheCounter(data);
}
})
}
function doTheCounter(data) {
var scrollfromnumber = data.scrollfromnumber;
var displaynumber = data.displaynumber;
var reloadinterval = data.reloadinterval;
jQuery("#counter").flipCounter({
number: scrollfromnumber,
numIntegralDigits: 6,
numFractionalDigits: 0
});
jQuery("#counter").flipCounter("startAnimation", {
end_number: (displaynumber),
easing: jQuery.easing.easeInOutCubic,
duration: 5000,
onAnimationStopped: function() {
setTimeout(doAjax,10000);
}
});
}
Причина, по которой ваш код не работает с setInterval, заключается в том, что вы никогда не очищали предыдущий интервал, вы просто запускали новый каждый раз, поэтому сначала вы отправляли один запрос, затем 2, 4, 8, 16, 32, 64 и т. Д. До сбой браузера.
UPDATE:
jQuery(document).ready(doAjax);
jQuery(document).ready(function(){
jQuery("#counter").flipCounter({
number: 0,
numIntegralDigits: 6,
numFractionalDigits: 0
});
});
function doAjax() {
jQuery.ajax({
type: "POST",
url: "counterData.php",
dataType: "json",
cache: false,
success: function(data) {
doTheCounter(data);
}
})
}
function doTheCounter(data) {
var scrollfromnumber = data.scrollfromnumber;
var displaynumber = data.displaynumber;
var reloadinterval = data.reloadinterval;
jQuery("#counter").flipCounter("startAnimation", {
end_number: (displaynumber),
easing: jQuery.easing.easeInOutCubic,
duration: 5000,
onAnimationStopped: function() {
setTimeout(doAjax,10000);
}
});
}