Не так давно начал использовать jQuery.ajax. В процессе написания одного скрипта обнаружил, что нельзя немедленно использовать ответ ajax запроса. В моём случае запрос передается серверному скрипту, который в свою очередь со стороннего домена наполняет json файл. Наполнение firebug-ом отслеживается от 12 до 20 секунд, что достаточно долго по моим меркам (нельзя заставлять людей столько ждать). Придумал следующий выход из ситуации:
Вводим глобальную переменную (дата, курс валют к рублю):
Наш запрос на внешний сервер:
По complete открываем старый json файл, даём возможность пользователю начать работать со вчерашними данными:
Через 20 секунд после старта proxy.php, пока полностью не обновится json, считываем его ещё раз, выдаём людям актуальные данные, всё это делаем по success:
Таким образом удалось запускать обновление данных json без участия cron. Также результат ajax запроса доступен вне функции вызова.
В серверном скрипте само собой разумеется организована проверка по дате, обновление произойдет только один раз, с приходом в каждый новый день первого посетителя на страницу со скриптом.
Может можно было проще, но это только начало моего опыта.
Вводим глобальную переменную (дата, курс валют к рублю):
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 запроса доступен вне функции вызова.
В серверном скрипте само собой разумеется организована проверка по дате, обновление произойдет только один раз, с приходом в каждый новый день первого посетителя на страницу со скриптом.
Может можно было проще, но это только начало моего опыта.