Обновление Javascript только с одной строкой запроса

0

У меня есть страница, которая автоматически обновляется с помощью javascript, и она обновляется со всеми параметрами в URL, например. server/ViewRoom.aspx? RoomID = 5 & ConfirmID = 4834 Я хотел бы сохранить параметр RoomID.

Мой код на данный момент:

   <script type="text/javascript">
     var timeout = setTimeout("location.reload(true);", 50000); // How often do you want the initial page to refresh?
     function resetTimeout() {
         clearTimeout(timeout);
         timeout = setTimeout("location.reload(true);", 50000); // How often do you want the page to refresh?
     }
   </script>

Как я могу только выбрать строку запроса RoomID для перезагрузки

  • 0
    Вы можете попробовать location.search = location.search.substring(0,location.search.indexOf('&')) , если RoomID всегда первый параметр
  • 0
    Я так не думаю, вы можете добиться этого с помощью .reload() , потому что .reload() просто загружает текущую страницу и не имеет никакого контроля над URL. вместо этого вы можете извлечь текущий URL страницы, удалить из него ненужные параметры и затем загрузить эту страницу через js
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Как упоминал Edmund24, вам не нужно очищать таймаут, так как вы перезагружаете страницу, поэтому наш код выглядит так:

<script type="text/javascript">
  var timeout = setTimeout("location.reload(true);", 50000);
</script>

Точно так же нам не нужно отслеживать идентификатор обработчика, поэтому мы можем игнорировать его сохранение:

<script type="text/javascript">
  setTimeout("location.reload(true);", 50000);
</script>

Основная проблема с кодом Эдмунда заключается в том, что в случае, если строка запроса RoomID не является первой строкой запроса в URL-адресе, это не будет вести себя так, как вы ожидали. Поэтому вместо этого нам нужно явно искать и захватывать строку запроса, содержащую "RoomID":

<script type="text/javascript">
  setTimeout(function () {
    var domain = location.href.split('?')[0],
        queryStrings = location.href.split('?')[1].split('&'),
        roomIDqs;

    queryStrings.forEach(function (e, i, a) {
      if(~e.indexOf('RoomID')) roomIDqs = e;
    });

    location.href = domain + roomIDqs;

  }, 50000);
</script>

Я не тестировал этот код, но это должна быть идея.

Заметки:

  • ~.indexOf('other string') является ярлыком для contains(), поскольку javascript не имеет встроенного метода contains().
  • Array.foreach(function (e, i, a) {}) - функция обратного вызова автоматически передает текущий элемент (e), текущий индекс (i) и полный массив (a). Мы используем e здесь, чтобы поговорить о текущей строке запроса.
  • 0
    что если после каких-то действий пользователя нам понадобится сброс таймаута? :-)
  • 0
    В таком случае, да, нам нужно сохранить идентификатор обработчика. Но этот вопрос ничего не задал, поэтому я исключил его из своего ответа.
0

Я не думаю, что вам нужен явный тайм-аут, так как перезагрузка происходит.

<script type="text/javascript">
    setTimeout( function () { location.href = location.href.split('&')[0]; }, 50000);
</script>

Приведенный выше код имитирует refrash, передавая измененный href (все после первого и удаляется) href вашего текущего местоположения

  • 1
    и если URL-адрес сервера / ViewRoom.aspx? ConfirmID = 4834 & RoomID = 5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню