Я поддерживаю кэш в JavaScript, используя jquery в глобальной переменной кэша.
При получении новой информации с использованием AJAX она добавляется в кэш.
Если его нет в кеше, я хочу AJAX с сервера.
Я хочу реализовать функцию для запроса по требованию и использовать ее так:
$("#label").html(GetName("user123"));
Где GetName () должен быть похож на:
function GetName(username) {
if (Cache[username] != null) return Cache[username];
else
return QueryUsernameFromServer(username)
}
QueryUsernameFromServer () должно иметь вид:
function QueryUsernameFromServer (username) {
return $.ajax(…);
}
Однако $ .ajax является асинхронным, что означает, что он не может ожидать значение (и, следовательно, не может его вернуть).
Настоятельно не рекомендуется использовать $ .ajax в режиме синхронизации (браузер зависает и не поддерживает JSONP), http://api.jquery.com/jQuery.ajax/
При использовании этого подхода http://www.techfounder.net/2008/05/17/simple-javascript-cache/, требуется обратный вызов. Однако создание обратного вызова для каждого использования нежелательно.
Есть ли хороший способ реализовать функцию «кэширования по требованию» в js и ajax без выделенного обратного вызова для каждого использования?