Как я могу предотвратить блокировку браузера (или показывать символ ожидания) при выполнении синхронного запроса с jQuery? - PullRequest
1 голос
/ 02 августа 2010

Функция использует метод jquery.ajax() для получения данных с сервера и использования их в качестве возвращаемого значения. Если я использую async = true , функция возвращает преждевременно пустое значение. Если я использую async = false , ожидание функции слишком велико. Я попытался переключить div, показывающий вращающиеся часы прямо перед запросом, но div не появляется, пока запрос не закончится.

Какой-нибудь совет, как не блокировать браузер и не показывать значок ожидания / символ / текст?

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

Вы не можете.Синхронные запросы блокируют браузер, в том числе любые анимации, которые у вас могут возникнуть, или изменения, которые могут быть отложены - вот почему они не приветствуются.Скорее всего, вы пытаетесь вернуть значение из функции, запускающей ajax-запрос, который НЕ БУДЕТ РАБОТАТЬ для асинхронных запросов - измените свою логику, чтобы обрабатывать обработку ответа при обратном вызове успеха, и все будет хорошо ...

1 голос
/ 02 августа 2010

Один из способов - поместить изображение (загрузка ... gif animated).Покажите это, прежде чем отправить Ajax.Затем скрыть это на успех.Как показано ниже.

$.ajax({
  url: 'ajax/test.html',
  beforeSend : function(){
     $('#LodingImg').show(); // show image..
  },
  success: function(data) {
    $('#LodingImg').hide(); // hide image
    $('.result').html(data);
    alert('Load was performed.');
  }
});
1 голос
/ 02 августа 2010

Чтобы не блокировать браузер, вы должны использовать асинхронный запрос, возможно, ваш код или ajax-ответ требует рефакторинга.

Но если вы все еще не хотите использовать асинхронные запросы, вы можете сделать что-то вроде этого:

  1. Вставьте вращающиеся часы и покажите
  2. Когда будете готовы (и я имею в виду обратный вызов), сделайте запрос ajax
  3. Наконец, удалите часы
...