2013-12-01 8 views
1

Должен признаться, что я не очень хорошо разбираюсь в Ajax, Java-скрипте или CSS, если честно. Пожалуйста, успокойся. Мне нужна помощь. Я использую CMS, который я завернул в JQuery mobile и не могу использовать методы метаобработки. Как сделать перезагрузку страницы только 2 раза в указанное время с помощью кода ниже.Перезагрузить страницу 2 раза с ajax/javascript и setTimeout

<script type="text/javascript"> 

$(document).ready(function(){ 
setTimeout(function(){ 
    window.location.reload(); 
}, 2000); 
}); 

$(document).ready(function(){ 
setTimeout(function(){ 
    window.location.reload(); 
}, 15000); 
}); 
</script> 

Проблема, с которой я столкнулась, состоит в том, что она игнорирует вторую и продолжает двигаться в цикле. Я знаю, что это простое решение.

+1

Конечно, он проходит в цикле. Когда вы перезагружаете страницу, javascript запускается снова. Второе действие уничтожается при разгрузке страницы. – Popnoodles

+0

Попробуйте setInterval – vijaykumar

ответ

0

Вам необходимо упорство преодолеть проблему цикла. Это потому, что каждый раз, когда страница перезагружается, вычисляется javascript. Ваша страница должна «помнить», что она была перезагружена. ...как? Есть много способов. Вы можете добавить параметр в строку запроса или сохранить эти данные в файле cookie или в локальном хранилище. Вы можете отслеживать перезагрузку серверной части. Каждый подход имеет свои плюсы и минусы.

Вот простой рабочий раствор, близкий к одному, которого вы ищете, который использует LocalStorage (старые браузеры не поддерживают LocalStorage http://caniuse.com/#feat=namevalue-storage)

<script type="text/javascript"> 
    ;(function() { 
     var reloads = [2000, 13000], 
      storageKey = 'reloadIndex', 
      reloadIndex = parseInt(localStorage.getItem(storageKey), 10) || 0; 

     if (reloadIndex >= reloads.length || isNaN(reloadIndex)) { 
      localStorage.removeItem(storageKey); 
      return; 
     } 

     setTimeout(function(){ 
      window.location.reload(); 
     }, reloads[reloadIndex]); 

     localStorage.setItem(storageKey, parseInt(reloadIndex, 10) + 1); 
    }()); 
</script> 

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

+0

Это работает и является ответом. Я не видел много вопросов, связанных с перезагрузкой страниц stackTimeout, которые используют localStorage в качестве решения. Я согласен с тем, что он не поддерживается старыми браузерами, потому что он предназначен исключительно для использования сотовых телефонов. – user2974907

+0

Кроме того, это было хорошим временным решением для мобильных приложений для мобильных устройств JQuery, которые используют Jquery/Ajax для извлечения данных из db. В моем случае это будет работать неправильно, если я не перезагружу всю страницу. Обратите внимание на слова «временное решение», так как вы всегда должны знать, что такое настоящая проблема, и исправить это. – user2974907

Смежные вопросы