#jquery #ajax
#jquery #ajax
Вопрос:
Я пытаюсь воспроизвести сценарий, в котором веб-страница содержит несколько областей, каждая из которых обновляется вызовом API и обновляется каждые X секунд.
window.setInterval(function() {
console.log("interval start");
getData;
console.log("interval end");
}, 5000);
//for (i = 1; i <= 3; i ) {
// console.log(i);
// setTimeout(getData, 5000);
//}
function getData(url, id) {
console.log("getData start");
$.get(url, function(data) {
console.log('data=' data);
$(id).html(data);
});
};
getData('@Url.Action("GetTemperature", "SomeData")', '#temp');
getData('@Url.Action("GetStockPrice", "SomeData")', '#stock');
getData('@Url.Action("GetStateName", "SomeData")', '#state');
getData('@Url.Action("GetARandomDate", "SomeData")', '#myDate');
Вот журналы:
- Запуск getData
- AjaxTimer:95 Начало получения данных
- AjaxTimer:95 Начало получения данных
- AjaxTimer:95 Начало получения данных
- AjaxTimer:98 данных = 188
- AjaxTimer:98 данных = Вермонт
- AjaxTimer:98 данных = 88
- AjaxTimer:98 data=2014-08-26T00:00:00
- AjaxTimer: 83 интервала запуска
- AjaxTimer: окончание интервала 85
- AjaxTimer: 83 интервала запуска
- AjaxTimer: окончание интервала 85
- AjaxTimer: 83 интервала запуска
- AjaxTimer: окончание интервала 85
getData
не вызывается во второй раз. Я не уверен, где я ошибаюсь.
Комментарии:
1.
getData
поскольку оператор сам по себе ничего не делает; это просто ссылка на функцию. Вам нужно фактически вызвать функцию с некоторыми аргументами, чтобы выполнить ее, как вы находитесь в последних 4 строках вашей логики. Однако выполнение 4 AJAX-запросов каждые 5 секунд не является хорошим шаблоном для следования. Это не будет хорошо масштабироваться и фактически приведет к DDOS-атаке на ваш собственный сервер. Лучшей идеей было бы сначала вернуть все данные из одной конечной точки, а также использовать отправленные события Websockets / Server для их извлечения.2. Да,
getData
не вызывается, но изменение его наgetData()
вызовет его3. Рори, спасибо за ввод — имеет смысл.
Ответ №1:
Ваш setInterval
это:
window.setInterval(function () {
console.log("interval start"); // Log to console
getData; // A variable
console.log("interval end"); // Log to console
}, 5000);
Все вызовы функций в JavaScript должны заканчиваться на ()
, поэтому просто обновите среднюю строку на
getData();
и getData будет вызываться по интервалу.
Комментарии:
1. Она будет вызвана, но без аргументов.
2. Конечно, но это близко к исходному источнику. Конечно, добавление аргументов возможно.