#jquery #django #ajax
#jquery #django #ajax
Вопрос:
Я создаю веб-страницу с использованием Django и Ajax. Я хочу обновлять свою страницу каждые 5 секунд в зависимости от состояния переключателя начальной загрузки. т.е.
- Включено — автоматическое обновление данных таблицы каждые 5 секунд
- Выкл. — не обновлять
Вызов ajax jQuery:
$(document).ready(function () {
$('#auto_switch').hide();
$('#loading').show();
var broker = '{{ broker }}';
$.ajax({
type: "GET",
cache: true,
url: '{% url 'broker:load_data' %}',
data: {
'broker': broker,
},
data_type: 'html',
success: function (data) {
$('#loading').hide()
$('#auto_switch').show();
$('#stock_holdings').html(data.rendered_table);
}
});
$("#auto_switch").change(function () {
if ($(this).prop("checked") == true) {
setInterval(function () {
$.ajax({
type: "GET",
cache: true,
url: '{% url 'broker:load_data' %}',
data: {
'broker': broker,
},
data_type: 'html',
success: function (data) {
$('#loading').hide()
$('#auto_switch').show();
$('#stock_holdings').html(data.rendered_table);
}
});
}, 5000);
else {
$.ajax({
type: "GET",
cache: true,
url: '{% url 'broker:load_data' %}',
data: {
'broker': broker,
},
data_type: 'html',
success: function (data) {
$('#loading').hide()
$('#auto_switch').show();
$('#stock_holdings').html(data.rendered_table);
}
});
}
});
});
Я ожидаю, что при автоматическом переключении (кнопка переключения включена) функция setInterval сработает, и данные таблицы будут обновляться каждые 5 секунд, и при любом изменении переключателя он обнаружит свой статус как выключенный, и автоматическое обновление не произойдет. Однако в настоящее время его автоматическое обновление не зависит от того, включен или выключен переключатель.
Комментарии:
1. Есть лучшие способы обновления страниц, чем 5-секундный setInterval, но я думаю, это работает для демонстрации или простого веб-сайта.
2. ~ FSDford Не могли бы вы, пожалуйста, помочь, дайте мне знать, какие другие способы, кроме setInterval, могут помочь в решении этой задачи? Также в настоящее время этот код не работает. Независимо от состояния переключателя, автоматическое обновление данных таблицы не происходит.
Ответ №1:
Попробуйте использовать :
$(document).on('change',"#auto_switch",function(){
вместо
$("#auto_switch").change(function () {
Комментарии:
1. Пробовал, но все равно никаких изменений. При переключении переключателя в положение on он запускает URL-адрес один раз, но не продолжает делать это каждые 5 секунд, пока переключатель все еще находится в положении on.
2. сделайте следующее add console.log («работает или нет») внутри вашей функции перед условиями
3. затем добавьте add console.log («его работа после условия») внутри вашей функции после условий
4. Я имею в виду это условие, если ($(this).prop(«проверено») == true) {
5. Вы правы, он не вводит условие if, поскольку я вижу только «его работа или нет» при переключении. Нужно найти способ проверить состояние переключателя сейчас.
Ответ №2:
var shouldRefresh = false;
$(document).on('change', '#auto_switch', function()
{
var isChecked = $(this).is(':checked');
shouldRefresh = isChecked;
if (shouldRefresh)
{
var interval = setInterval(function()
{
if (!shouldRefresh)
clearInterval(interval);
console.log('This is executed every second');
}, 1000);
}
});