AJAX запрос каждую 1 секунду без блокировки веб-страницы, как к ней подойти - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю веб-приложение, которое будет управлять моим устройством. Устройство имеет свой собственный веб-сервер (который я не могу контролировать) и свой собственный язык. Я управляю им, выполняя ajax GET-запросы, которые выполняют сценарии на устройстве.

Например, "http://127.0.0.1/nameOfScript?varName=varValue

Я также могу получить данные с устройства через JSON, например http://127.0.0.1/GetValuesJSON, и он отправляет обратно созданный мною объект json, пока что все хорошо.

Моя проблема в том, что Я хочу постоянно считывать данные с устройства и иметь возможность отправлять данные одновременно, поэтому мне нужно запускать второй URL-адрес каждые 0,5 / 1секунду и иметь возможность запускать первый URL-адрес в любое время, устройство и веб-страницу будет в локальной сети, безопасность не имеет значения.

Возможно ли это сделать в HTML / JavaScript, если да, то как? Что мне нужно исследовать? Или мне нужно использовать дополнительный веб-сервер для веб-страницы, которая будет обрабатывать это?

@ abhinavxeon

^ Дали решение проблемы, кто-то отказался от него, и комментарий был удален, но решение работает и работает точно что я хочу это сделать! H Вот решение:

var interval;
function doSomething() {
  $.ajax({
      type: 'GET',
      url: 'someurl',
      data: $(this).serialize(),
      dataType: 'json',
      success: function (data) {        
              $("#content").text(data)
              interval = setTimeout(doSomething, 1000);   
           }
       });
      }
doSomething();

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Так что вам нужно опросить сервер. Обычно вы делаете это с помощью веб-сокетов. Если вы не можете сделать веб-сокеты, то вы должны положиться на опрос. Для этого вам нужно использовать setTimeout или setInterval.

Основа c Идея опроса сервера была бы

function grabData () {
  fetch('/your/endpoint/')
    .then((response) => {
      if (!response.ok) {
        throw new Error('Something bad happened: ' + response.statusText );
      }
      return response.json();  // or text() if it is not JSON
    })
    .then((myJSON) => {
      console.log(myJSON)
      window.setTimeout(grabData, 2000) // call again after a delay
    .catch((error) => {
      console.error('There was a problem', error);
    });
}

И вы можете создать другую функцию, которая выполняет обновление, и вызывать ее, когда вам нужно отправить данные.

0 голосов
/ 13 апреля 2020
 function yourfuncation() {
$.ajax({
            type: 'GET',
            url: 'GETURL',
            success: function (data) {
                    $('#hidden').val(data);// first set the value     

            }
    });
}

используйте setinterval

var interval = setInterval(yourfunction, 1000);

или вы можете go таким образом

    var interval;
function callAjax() {
  $.ajax({
                type: 'POST',
                url: 'increment.php',
                data: $(this).serialize(),
                dataType: 'json',
                success: function (data) {
                        $('#hidden').val(data);// first set the value 
                        interval = setTimeout(callAjax, 1000);   
                }
        });
}
callAjax();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...