2010-10-22 3 views
0

У меня есть div, содержимое которого постоянно изменяется в зависимости от процесса на стороне сервера. В настоящее время я использую загрузку jQuery для опроса сервера каждые 3 секунды для получения любых обновлений.jQuery: помощь с обновлением содержимого div onchange

Это то, что у меня есть:

function poll() { 
    reloadPage(); 
    setTimeout("poll();", 3000); 
} 

function reloadPage() { 
     $("#mydiv").load(location.href + " #mydiv>*", ""); 
} 

Это хорошо работает в Firefox, но в IE, нагрузка не обновляет DIV, вероятно, из-за проблем кэширования. Есть ли лучший способ делать то, что я пытаюсь делать, кроме опроса периодически?

+0

что такое 'location.href +" #mydiv> * "' должно быть? – Tomalak

+0

Выполняет частичное обновление только на том, что div – Prabhu

+0

@Tomalak проверяет документы на http://api.jquery.com/load/, мне приходилось самому искать его – Znarkus

ответ

4

Вам необходимо изменить URL-адрес для каждого запроса, чтобы IE не кэшировал ответ.

Например:

function poll() { 
    reloadPage(); 
    setTimeout(poll, 3000); 
} 

function reloadPage() { 
    $("#mydiv").load(location.href + "?Timestamp=" + new Date() + " #mydiv>*", ""); 
} 

Кроме того, вы не должны передавать строку в setTimeout.

+0

Отлично, спасибо большое, это сделало это ... – Prabhu

+0

jQuery не кэширует ответы без заголовков для кеширования? Просто любопытно, например. PHP не отправляет эти заголовки по умолчанию – Znarkus

+0

@Znarkus: Это проблема IE; IE имеет очень агрессивное кэширование. – SLaks

2

jQuery ajax имеет кучу настроек по умолчанию, один из которых контролирует кеширование. Если вы установите для него значение false, он добавит временную метку к вызову ajax, чтобы предотвратить кеширование.

http://api.jquery.com/jQuery.ajax/

+0

+1 за предложение $ .ajax. Я никогда не использую сокращения, это просто легче запомнить. – Znarkus

0

Есть ли лучший способ сделать то, что я пытаюсь сделать, кроме опроса периодически?

Поскольку HTTP - это протокол без гражданства, нет. Вы должны опросить, чтобы узнать, что происходит на сервере.

Но есть лучший способ осуществить опрос:

setInterval(function() { 
    $("#mydiv").load(location.href + " #mydiv>*", {Timestamp: new Date()}); 
}, 3000); 

Примечания:

  • определяют интервал вместо тайм-аута,
  • передать фактическую функцию setInterval, а не строка
  • использовать параметр dataload() для передачи в кэш-прерывателе
+0

Будет ли setInterval запускать первый вызов через 3 секунды или он начнется мгновенно? Мне нужно, чтобы первое произошло мгновенно. – Prabhu

+0

@Prabhu: Но «первая загрузка» - это сама загрузка страницы браузера. Тогда нагрузки происходят очень три секунды. Нет необходимости обновлять страницу сразу после ее завершения. – Tomalak

+0

круто, имеет смысл – Prabhu

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