Большая часть моей работы сделана с возможностью соединения базы данных, что означает, что мои классы у всех есть уникальный идентификатор от базы данных. Я всегда использую идентификатор от базы данных для генерации хэш-кода.
// Unique ID from database
private int _id;
...
{
return _id.GetHashCode();
}
2018 ПРИМЕЧАНИЕ: Этот ответ устарел; не стесняйтесь предлагать отредактировать этот ответ, который будет работать.
Вы можете связать ajaxStart и ajaxStop, используя настраиваемое пространство имен:
$(document).bind("ajaxStart.mine", function() {
$('#ajaxProgress').show();
});
$(document).bind("ajaxStop.mine", function() {
$('#ajaxProgress').hide();
});
Затем в других частях сайта вы временно отключите их перед ваш .json вызывает:
$(document).unbind(".mine");
Идея пришла из здесь при поиске ответа.
РЕДАКТИРОВАТЬ: У меня не было времени, чтобы проверить это, увы.
К сожалению, событие ajaxStart не содержит никакой дополнительной информации, которую вы можете использовать для решить, показывать анимацию или нет.
В общем, вот одна идея. Почему бы в вашем методе ajaxStart не запустить анимацию, скажем, через 200 миллисекунд? Если запросы ajax завершаются за 200 миллисекунд, вы не показываете никакой анимации, в противном случае вы показываете анимацию. Код может выглядеть примерно так:
var animationController = function animationController()
{
var timeout = null;
var delayBy = 200; //Number of milliseconds to wait before ajax animation starts.
var pub = {};
var actualAnimationStart = function actualAnimationStart()
{
$('#ajaxProgress').show();
};
var actualAnimationStop = function actualAnimationStop()
{
$('#ajaxProgress').hide();
};
pub.startAnimation = function animationController$startAnimation()
{
timeout = setTimeout(actualAnimationStart, delayBy);
};
pub.stopAnimation = function animationController$stopAnimation()
{
//If ajax call finishes before the timeout occurs, we wouldn't have
//shown any animation.
clearTimeout(timeout);
actualAnimationStop();
}
return pub;
}();
$(document).ready(
function()
{
$(document).ajaxStart(animationController.startAnimation);
$(document).ajaxStop(animationController.stopAnimation);
}
);