Оператор if в jQuery и HTML?
Я успешно запускаю следующий скрипт: он обновляет текст каждые 3 секунды.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function() {
window.setInterval(function() {
loadNewText()
}, 3000)
function loadNewText() {
$.ajax({
url: "/update_report",
type: "POST",
dataType: "json",
success: function(data) {
$(report).replaceWith(data)
}
});
}
});
</script>
Я хочу изменить функцию в HTML для запуска loadNewText (), только если есть изменения в определенной переменной в коде Python!
Я поместил переменные в маршрут Python:
@app.route('/console-output')
def console_output():
fileHandle = open("console_output.txt", "r")
lineList = fileHandle.readlines()
fileHandle.close()
last= lineList[len(lineList)-1]
with open('console_output.txt', 'r') as r:
co =r.read()
return render_template("console-output.html",console_output_msg=console_output_msg, last=last, co=co)
и напишите следующий код в HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function() {
if (last != console_output_msg) {
loadNewText();
}
function loadNewText() {
$.ajax({
url: "/update_text",
type: "POST",
dataType: "json",
success: function(data) {
$(new_text).replaceWith(data)
}
});
}
});
</script>
Этот способ не работает ! У меня нет большого опыта работы с Javascript! Я не знаю, правильно ли я вызываю переменные (last, console_output_msg) или моя функция недействительна!
Если есть способ исправить это или любое другое предложение вызвать loadNewText (), когда в коде Python происходят изменения!
Спасибо!

2 ответа
Вы не можете получить доступ к серверным переменным на клиенте.
Вы можете сохранить предыдущий вывод в переменной JavaScript и обновлять DOM только в том случае, если он изменился. Вам нужно поставитьif
заявление внутриloadNewText()
функция после получения ответа, чтобы она могла его сравнить.
Это не пропустит вызов AJAX, но позволит избежать обновления страницы, если ничего не изменилось.
$(function() {
let last_output;
window.setInterval(loadNewText, 3000)
function loadNewText() {
$.ajax({
url: "/update_report",
type: "POST",
dataType: "json",
success: function(data) {
if (data != last_output) {
$(report).replaceWith(data);
last_output = data;
}
}
});
}
});
-
0Спасибо за объяснение, но моя проблема в том, что я не хочу вызывать функцию каждые 3 секунды! Я имею в виду избегать доступа к маршруту update_report каждые 3 секунды! Я ищу решение, которое обновлялось бы только тогда, когда изменения происходят в определенном текстовом файле, который я ввел в Python! Спасибо
-
0Вы должны позвонить на сервер, клиент не имеет возможности узнать, изменился ли файл на сервере.
Есть два популярных способа обновить текст при изменении в Python:
Длительный опрос
С использованиемsetInterval()
функция для запуска ajax-вызова сервера, чтобы проверить, есть ли какие-либо изменения.WebSocket
Реализуйте соединение WebSocket между сервером и браузером. Получите сообщение, отправленное с сервера.Ссылка для реализации WebSocket на Python.
https://websockets.readthedocs.io/en/8.1/intro.html
-
0Он спрашивает, как реализовать длинный опрос, он просто не называл это так.
-
0@Barmar Да, думаю, в его случае это самый простой способ. Поскольку он хочет исключить вызов функции
loadNewText()
, я сообщаю ему, что есть еще один вариант на тот случай, если он этого не знает.
Другие вопросы
- Выберите элемент, необходимый в vuejs, не работает1 ответ
Я новичок в vuejs. Я хочу сделать элемент выбора из раскрывающегося списка обязательным, я попытался добавить требуемый атрибут, как в приведенном ниже коде. <v-select :items="fournisseursByClient" ...
- как добавить ссылки на липкую панель навигации1 ответ
Я попытался добавить фоновое изображение для своего веб-сайта django, и это вообще не сработало. Я использую этот ответ из stackoverflow, а также ссылку на вопрос stackoverflow. Но это не сработало. А также я переношу изменения в базу данных. добавить фоновое изображение как в методе cssbackground-i...
- Как заблокировать меню боковой панели, скрытое при обновлении страницы1 ответ
У меня есть меню боковой панели, которое было успешно скрыто и отображено. Когда меню боковой панели скрыто и я обновляю страницу или браузер, скрытое меню боковой панели вернется к своему первоначальному виду, а не в том положении, в котором оно было скрыто. Вопрос в том, как заблокировать, чтобы о...
- Как создать html-страницу со ссылкой [закрыто]1 ответ
Закрыто . Этот вопрос должен быть более конкретным . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он фокусировался только на одной проблеме, отредактировав этот пост . Закрыт в прошлом месяце . Уточните этот вопрос Как разместить видео ключи на моем...
- У меня проблема с выполнением в колбе Python1 ответ
Я новичок в сборке python api. Я хочу, чтобы данные зависели от даты. https://programminghistorian.org/en/lessons/creating-apis-with-python-and-flask#what-is-an-api Я следую по этой ссылке, чтобы закодировать свой api, но я не знаю, что я могу сделать при выполнении. Это мой код на Python:# -*- codi...
- Как добавить проверку ввода в React?2 ответ
У меня простая форма, в которойfirstName а такжеlastName . <label htmlFor="firstName">First Name: </label> <input type="text" className="form-control" id="firstName" name="firstName" value={basicDet...
- onload функция Javascript return undefined2 ответ
Я вызываю функцию JavaScript, в которой хочу проверить высоту и ширину изображения перед загрузкой. я возвращаюсьfalse значение, но в исходной функции, когда это консольный журнал, он даетundefined . Для лучшего понимания проверьте код. Код работает нормально, но я хочу получитьtrue а такжеfalse из ...
- Фильтровать видео YouTube по категории1 ответ
В настоящее время я работаю над проектом, который отображает множество популярных видео YouTube из нескольких регионов. В настоящее время я работаю над функцией, которая позволяет пользователям фильтровать результаты по категориям и не имею честного представления о том, с чего начать реализацию. Вот...
- Удалить текст из строки Javascript1 ответ
Ниже приведено изображение ответа, который я получаю при отправке формы с неправильным адресом электронной почты. [IMG_OUR_ID=74.jpg] Я хочу удалить слово сообщение: & фигурные скобки вокруг строки из этого ответа. Я пробую следующее:$('#registerStatus').text(response.replace('message:', '')) Н...
- Остановить воспроизведение видео YouTube при закрытии CUSTOM модального окна1 ответ
Привет, классные Overflowers. Мне удалось реализовать красивый, простой модальный файл, который отображает видео на YouTube при нажатии на эскиз img. Моя проблема в том, что я не могу заставить видео останавливаться после закрытия модального окна. Я пробовал здесь много идей и скриптов, но многие из...

"Завидую тестировщикам: все хотят с ними дружить."
setInterval
, чтобы он не запускался повторно. BarmarsetInterval
для сравнения двух переменных, поступающих из кода Python, и запуска функции при определенных условиях? Anis Zidi