SetTimeout для обновления частичного представления в MVC3 выполняется случайным образом - PullRequest
0 голосов
/ 10 августа 2011

Я работаю над приложением, которое использует 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>

1 Ответ

2 голосов
/ 10 августа 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...