обновить страницу с помощью jquery ajax - PullRequest
1 голос
/ 17 июня 2011

У меня есть веб-приложение, в котором я показываю комментарии пользователей на странице с указанием времени публикации. Так как комментарии регулярно публикуются, поэтому мне нужно обновлять время отправки комментариев каждые 1 минуту. Для этого я использую jquery ajax для обновления времени из дБ. Мой код такой:

<script type="text/javascript">

 setInterval("UpdateTime()", 60000);


function UpdateTime() {
    var id=$('#hdID').val();
    $.ajax({
        type: "POST",
        url: "mypage.aspx/UpdateTime",
        data: "{'id':'" + id + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            if (msg.d.length &gt; 0) {
                obj = document.getElementById('feed_TimeStamp' + id);
                obj.innerHTML = msg.d;
                //$(obj).slideDown("slow");
            }
        },
        async: false,
        error: function(xhr, status, error) {
            //alert(xhr.statusText);
        }
    });
}

</script>

CS файл:

   [WebMethod]
   public static string UpdateTime(string id)
   {
       Comments comments = new Comments();
       string time = &quot;&quot;;
       if (comments.LoadByPrimaryKey(Convert.ToInt32(id)))
           time = MyClass.GetTime(comments.CommentsDate);
       if (!(time.ToLower().Contains(&quot;sec&quot;) || time.ToLower().Contains(&quot;min&quot;)))
           time = &quot;&quot;;
       return time;
   } 

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

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

Это может быть ПРОБЛЕМА памяти + изменить настройки в вашем вызове ajax для асинхронного.

с

асинхронный: false

на

async: true

, когда вы говорите async: false, это означает, что вы не разрешаете браузеру отправлять запрос асинхронным способом, который совершенно противоположен AJAX - это должнобыть асинхронным вызовом.

См. документацию здесь:

async По умолчанию: true По умолчанию все запросы отправляются асинхронно (т. е. по умолчанию установлено значение true).Если вам нужны синхронные запросы, установите для этого параметра значение false.Междоменные запросы и dataType: запросы «jsonp» не поддерживают синхронную работу.Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

Предложение:

Я думаю, что вы пытаетесь загрузить all comments, что может быть МНОГО в памяти, если ваш набор результатов слишком велик, чтобы браузер сохранял данные и отправлял их на элемент.

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

1 голос
/ 17 июня 2011

Когда вы используете функцию jquery ajax с

async: false,

страница будет оставаться занятой до окончания запроса.

0 голосов
/ 17 июня 2011

Возьмите это: async: false (по умолчанию это правда)

Вы не должны делать ajax-вызов синхронно, если только в крайне редких случаях вы должны ждать.

Это определенно заблокируетстраница функционирует (даже без щелчка мышью)

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