Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.01.2016
Сообщений: 4

SetInterval в IE работает только при открытой консоли

08.01.2016, 20:57. Показов 1901. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемы коллеги. Подскажите, почему так может происходить?

Создал простой скрипт, получающий данные из PHP скрипта.

PHP скрипт смотрит номер последнего id добавленного в базу, и добавляет следущую строку, выводя после работы номер последней записи, и номер записи вставленной при вызове скрипта.

В JS тоже всего две функции. Первая соответственно дергает скрипт, вторая задает периодичность, с которой его дергают. В Хроме все пашет на ура. В IE выводит вроде ответ от скрипта PHP, но при этом в базу ничего не добавляется. При обновлении, снова выводит тот же номер последней записи, что и до обновления страницы. Счетчик стоит и не меняется. Однако, стоит нажать F12 и все чудесным образом начинает работать. Консоль закрываешь опять все встает.

Для чистоты эксперимента пробовал в гугле, пробовал запускать php скрипт напрямую в браузере. Все отлично отрабатывает. Загвоздка только в IE.

Текст JS:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function request_data(){
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', 'http://chat.dzenit.ru/event_post.php', false);
httpRequest.send(null);
document.getElementById('test1').innerHTML = httpRequest.responseText;
}
 
 
function timer1()
{   
    setInterval(request_data,2000);
    }
timer1();
Добавлено через 25 минут
добавлю что вживую это можно посмотреть на http://chat.dzenit.ru, а вот код PHP скрипта ( хотя он наверное мало чем поможет) :

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
 
$host = "localhost";
$user = "test";
$pass = "pass";
$database = "tests";
$rows_num= 1;
 
 
mysql_connect($host, $user, $pass) or die ("Пипец котенку!!");
mysql_select_db($database) or die ("Базы то и нету");
$query = "SELECT * FROM `events` ORDER BY `id` DESC LIMIT 1";
$result = mysql_query($query);
 
while($row = mysql_fetch_array($result))
        {
        if(isset($row['id'])) {
$rows_num = $row['id'];
        }
                        
                        
        }
$text = "<hr> Начальное значение номера записи:&nbsp;&nbsp;".$rows_num."<hr>";
        echo $text;
        
        
   $i=$rows_num+1;
    $name="event number: ".$i;
    $description="test description for event number-".$i;
    $status = 12;
    
    $query = 'INSERT INTO events (`name`, `description`, `status`) VALUES ("'.$name.'","'.$description.'", "'.$status.'");';
      
    $result = mysql_query ($query);
    
    
if ($result == "true")
                {
                $name = "В базу добавлена запись под номером: ".$i."<hr>" ;
                echo $name;
                  }
 
        else{ 
        echo "Хрень вышла с записью номер: ".$i."<hr>";
            }
                       
                     
 
        
            mysql_close();       
?>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2016, 20:57
Ответы с готовыми решениями:

Микрофон работает только при открытой вкладке "Записывающие устройства"
Микрофон работает только при открытой вкладке &quot;Записывающие устройства&quot;, но очень странно. Он выводит звук на устройство воспроизведения,...

SetInterval срабатывает только один раз
Всем привет, Почему setInterval, срабатываеть только один раз? &lt;script type=&quot;text/javascript&quot;&gt; ...

Почему setInterval срабатывает только один раз?
впервые столкнулся с этой функцией, и вот в чем проблема: new_image.style.opacity = 0.1; setInterval( function() { ...

6
Все элементарное - сложно
133 / 118 / 50
Регистрация: 14.04.2014
Сообщений: 509
09.01.2016, 02:25
Думаю дело в кешировании get-запроса. Т.е. ie при выполнении get-запроса не выполняет запрос, а выдает предыдущий результат по этому запросу(ибо зачем? урл же тот же самый =) ). Сделано для ускорения работы браузера. Но ie это не спасло =)
IE9- и кеширование

Обычно ответы на запросы XMLHttpRequest кешируются, как и обычные страницы.

Но IE9- по умолчанию кеширует все ответы, не снабжённые антикеш-заголовком. Другие браузеры этого не делают. Чтобы этого избежать, сервер должен добавить в ответ соответствующие антикеш-заголовки, например Cache-Control: no-cache.

Впрочем, использовать заголовки типа Expires, Last-Modified и Cache-Control рекомендуется в любом случае, чтобы дать понять браузеру (не обязательно IE), что ему следует делать.
Отсюда
0
0 / 0 / 0
Регистрация: 08.01.2016
Сообщений: 4
11.01.2016, 10:23  [ТС]
Увы, но во первых IE 11, а во вторых не помогло.
Я добавил в заголовок <meta http-equiv="Cache-Control" content="no-cache" /> но результат тот же самый.

Хотя я подозреваю что истина где-то рядом, симптоматика очень похожа на описанную. Такое ощущение что браузер действительно кеширует последний удачно выполненный запрос из PHP и в дальнейшем, при перезагрузке страницы не дергает php скрипт, а выдает то, что осталось в памяти.
0
Все элементарное - сложно
133 / 118 / 50
Регистрация: 14.04.2014
Сообщений: 509
11.01.2016, 10:25
Ну дык и добавьте рандомную строку вконце запроса=)
0
0 / 0 / 0
Регистрация: 08.01.2016
Сообщений: 4
11.01.2016, 10:33  [ТС]
Хммм... я поменял тип запроса в XMLhttprequest с 'GET' на 'POST' и все заработало. Может кому пригодится. А я пошел учить спецификацию на POST и на GET. Видимо я чего-то не понимаю.
0
Все элементарное - сложно
133 / 118 / 50
Регистрация: 14.04.2014
Сообщений: 509
11.01.2016, 10:36
А вот это вы зря, post запрос используют только для отправки данных, а не для запроса. Лучше добавьте к get запросу рандомную строку, как написано в статье

Добавлено через 1 минуту
get запрос по спеке должен кешироваться, если не указаны заголовки. IE же их игнорирует, поэтому ему нужно дать якобы уникальный запрос, что и решается добавлением рандомной строки=)
0
0 / 0 / 0
Регистрация: 08.01.2016
Сообщений: 4
11.01.2016, 12:16  [ТС]
Благодарю, сейчас буду пробовать.

Добавлено через 1 час 26 минут
Да, так тоже сработало. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2016, 12:16
Помогаю со студенческими работами здесь

setInterval не работает
Ну почему этот маленький зелёненький квадратик не хочет опускаться в низ? Я уже головой об стенку начинаю биться. &lt;div...

не работает setInterval
Выдает Uncaught SyntaxError: Unexpected identifier подскажите что не так var timer = setInterval( function() { ...

Не работает setInterval();
Подскажите, пожалуйста, почему код не перезапускается каждые 300 мс? &lt;title&gt;DOM elements&lt;/title&gt; &lt;body&gt; ...

Не работает setInterval
Здравствуйте var idb; var asd = 0; $(&quot;.button&quot;).mouseenter(function() { idb = $(this).attr('id'); var ...

Не работает setInterval
Хоть как напишешь код этой функции- не работает. Не знаю в чём проблема. Допустим функция называется lol(). Вот три варианта: 1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru