Оператор if в jQuery и HTML?

2

Я успешно запускаю следующий скрипт: он обновляет текст каждые 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 происходят изменения!

Спасибо!

  • 0
    Вы не можете получить доступ к серверным переменным в клиенте. И вы избавились от setInterval , чтобы он не запускался повторно.
  • 0
    То, что вы хотите, логически невозможно. Код Python не запускается, пока вы не вызовете AJAX. Таким образом, переменная не получает значения, пока вы ее не вызовете, и только тогда вы можете проверить, изменилось ли она по сравнению с предыдущим вызовом.
  • 0
    @Barmar можно ли использовать setInterval для сравнения двух переменных, поступающих из кода Python, и запуска функции при определенных условиях?
  • 0
    Вам нужно сделать вызов AJAX, чтобы получить переменную из Python в JS.
  • 0
    @Barmar Не могли бы вы привести пример или ссылку, где я могу найти больше об этом решении?
  • 0
    У вас может быть два маршрута: один, чтобы спросить, изменилось ли что-нибудь, и второй, чтобы получить обновленный текст.
  • 0
    Извините, я понятия не имею, где вы можете найти что-то подобное по ссылке. Просто подумайте об этом логически и напишите код.
  • 0
    Вы должны быть программистом, а не копировщиком.
  • 0
    @Barmar Как я уже упоминал в своем посте, у меня нет опыта работы с Javascript! Я попросил привести пример, чтобы понять ваше предложение не копировать и вставлять! Спасибо за вашу помощь, попробую ваше предложение
Теги:
flask
CodeFix

2 ответа

0

Вы не можете получить доступ к серверным переменным на клиенте.

Вы можете сохранить предыдущий вывод в переменной 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
    Вы должны позвонить на сервер, клиент не имеет возможности узнать, изменился ли файл на сервере.
  • 0
    Вот аналогия: вы хотите позвонить своей матери, только если она заболела. Но вы не можете узнать, больна ли она, не позвонив и не спросив ее.
  • 0
    Ладно! Спасибо за ваше терпение ! Я буду искать дополнительную информацию об этом!
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. Моя проблема в том, что я не могу заставить видео останавливаться после закрытия модального окна. Я пробовал здесь много идей и скриптов, но многие из...

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум