JQuery синхронный вызов AJAX в IE и Chrome скрывает «думающий» анимированный значок - PullRequest
1 голос
/ 15 марта 2012

У меня проблема с Internet Explorer, который отображает и скрывает значок «мышление» на синхронных вызовах.Я понимаю разницу между асинхронностью и синхронизацией, но синхронные вызовы должны позволять отображать изображение, выполнять AJAX, а затем скрывать изображение.В Firefox изображение показывает, что выполняется AJAX, и изображение исчезает ... но этого не происходит в IE и Chrome.

function get(url, cache){

  var resp;

    $('#pmt_ajaximg').show();

    $.ajax({
      url: url,
        dataType: 'json',
      async: false,
      context: document.body,
      cache: cache,
      success: function(response){
        if(response && response.hello){
            console.log(response.hello);
        }
            $('#pmt_ajaximg').hide();
      }
    });
}

Я пытался переместить $('#pmt_ajaximg').hide() в его complete()функция в $.ajax object, но это тоже не сработало.Интересно, что если я закомментирую $('#pmt_ajaximg').hide() полностью, я действительно вижу, что изображение появляется и остается там, так что я знаю, что оно изначально работает.

Кроме того, я также добавил console.log('test') к функции success(), и он показывает ПОСЛЕ того, как результат возвращается из AJAX, но $('#pmt_ajaximg').hide(), кажется, сразу запускается, таким образом скрывая $('#pmt_ajaximg').show() эффекты, прежде чем он имеет шанс показать.

Кроме того, прежде чем кто-либо скажет, что изображение может не быть таким быстрым, обратите внимание, что это упрощенная версия функции, и настоящая действительно требует некоторого времени, и, как я уже сказал, появляется в FF.

Очень странно.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2015

В своей работе я решил эту проблему, выполнив нечто подобное, и она отлично работала в Chrome и Firefox.

$('#pmt_ajaximg').show();

setTimeout(function(){
   $.ajax({
      url: url,
        dataType: 'json',
      async: false,
      context: document.body,
      cache: cache,
      success: function(response){
        if(response && response.hello){
            console.log(response.hello);
        }
            $('#pmt_ajaximg').hide();
      }
    });
}, 0);
0 голосов
/ 30 июля 2012

Похоже, что во время синхронного AJAX-запроса движок браузера не покидает поток JavaScript и не обновляет экран.

Это лучше объяснено на другом вопросе SO .

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