Веб-разработка / [Из песочницы] Использование результата jQuery.ajax вне функции вызова или можно обойтись и без cron

в 19:19, , рубрики: cron, json, метки: ,

Не так давно начал использовать jQuery.ajax. В процессе написания одного скрипта обнаружил, что нельзя немедленно использовать ответ ajax запроса. В моём случае запрос передается серверному скрипту, который в свою очередь со стороннего домена наполняет json файл. Наполнение firebug-ом отслеживается от 12 до 20 секунд, что достаточно долго по моим меркам (нельзя заставлять людей столько ждать). Придумал следующий выход из ситуации:

Вводим глобальную переменную (дата, курс валют к рублю):
var jscurr = jQuery.parseJSON('{"data":"2012-01-22","USD":31.9344,"EUR":40.3842,"UAH":3.98135}')

Наш запрос на внешний сервер:
jQuery(document).ready(function() {
jQuery.ajax({
type: "GET",
url: "proxy.php",
dataType: "script",
cashe: false,
complete: curencesjson(),
success: curencesjsonT()
});
});//конец onLoad

По complete открываем старый json файл, даём возможность пользователю начать работать со вчерашними данными:
function curencesjson() {
jQuery.ajax({
url: 'curences.json',
dataType: "json",
cache: false,
success: function(jscur) {
jsreturn(jscur);
}
});

//обновление глобальной переменной по success
function jsreturn(jscur){
jscurr = jscur;
}
}

Через 20 секунд после старта proxy.php, пока полностью не обновится json, считываем его ещё раз, выдаём людям актуальные данные, всё это делаем по success:
function curencesjsonT() {
setTimeout(function(){
jQuery.ajax({
url: 'curences.json',
dataType: "json",
cache: false,
success: function(jscur) {
jsreturn(jscur);
}
});
}, 20000);
}

//по success естественно опять происходит обновление глобальной переменной

Таким образом удалось запускать обновление данных json без участия cron. Также результат ajax запроса доступен вне функции вызова.
В серверном скрипте само собой разумеется организована проверка по дате, обновление произойдет только один раз, с приходом в каждый новый день первого посетителя на страницу со скриптом.

Может можно было проще, но это только начало моего опыта.

Автор: Lanrete


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js