SetTimeout для обновления частичного представления в MVC3 выполняется случайным образом

92
12

Я работаю над приложением, использующим asp.NET mvc3. Я создал частичное представление, и я вызываю это частичное представление в представлении, чтобы я мог обновить div без перезагрузки страницы. Я использую setTimeout (но я также попробовал setInterval), чтобы определить время обновления. Проблема в том, что он не работает, он обновляет div случайным образом, не следуя установленному мною времени, и нет никакой логики, которую я могу понять в нем, иногда он обновляет его дважды, иногда он ждет, но никогда больше не время Я поставил. Это код частичного представления. В представлении я просто вызываю частичный вид.

<script type="text/javascript">
var st;
function updateDiv() {
st = null;
clearTimeout(st);
console.log("posting");
$.post('@Url.Action("RefreshSelfUpdatingPartial")', function (data) {
$('#SelfUpdatingPartialDiv').hide().slideDown("slow").html(data);
//wait 15 seconds
st = setTimeout(updateDiv, 15000);
});
}
updateDiv();
</script>
<div id="SelfUpdatingPartialDiv">
test

</div>

спросил(а) 2011-08-10T09:54:00+04:00 9 лет, 2 месяца назад
1
Решение
70

"Это код частичного представления. В представлении я просто называю частичное представление".

Если весь приведенный выше код находится в частичном представлении, не означает, что $.post() будет загружать все вышеперечисленное в <div>, в результате чего вторая копия выше вложенного внутри себя? По истечении тайм-аута он просто будет удерживать в себе все больше и больше копий внутри себя.

Я предлагаю вам переместить все вышеперечисленное в ваш основной вид, тогда частичное представление должно возвращать только текст, который вы хотите увидеть в <div> (и без JavaScript).

(Если это не то, что вы имели в виду в заявлении, которое я цитировал, пожалуйста, обновите свое сообщение, чтобы более четко объяснить, где находится вышеприведенный код и что возвращает $.post('@Url.Action("RefreshSelfUpdatingPartial")).

(Кроме того, как сказал Алекс, не устанавливайте свою st переменную в null до того, как вы передадите ее clearTimeout() хотя я думаю, что вы можете удалить обе строки, потому что вам не нужно очищать таймаут после его запуска.)

ответил(а) 2011-08-10T10:41:00+04:00 9 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема