2017-02-20 5 views
0

Я использую ajax для вызова метода POST в контроллере. В среднем этот метод работает от 15 до 20 секунд.async ajax call - show loading gif

Я использую aync false в этом вызове, потому что мне нужно подождать ответа, чтобы узнать, к какому пути идти. Но, когда я использую async false, моя загрузка (gif) не отображается.

$(document).ajaxStart(function() { 
 
    $('#overlay').show();  
 
}); 
 

 
$(document).ajaxStop(function() { 
 
    $('#overlay').hide(); 
 
});

Что такое лучший способ решить это?

EDIT 1

Я функция сохранения, которая выполняет несколько проверок и вызывает метод в контроллере:

function salvarInformacoes(pedidos, ums, callback) { 
 
    $.ajax({ 
 
     url: 'PlanoCortes/SalvarInformacoes', 
 
     type: 'POST', 
 
     data: { 
 
      sglDeposito: $("#ddl-Deposito option:selected").text(), 
 
      codUnimetPCP: $('#ddl-Um-sip').val(), 
 
      numEtapa: $("#ddl-Operacao").val(), 
 
      rotinaUM: $('#chk-Rotina-UM').is(":checked"), 
 
      dscEtapa: $("#ddl-Operacao option:selected").text(), 
 
      dadosPedidosJson: pedidos, 
 
      dadosUMsJson: ums, 
 
      corteVirtual: corteVirtual 
 
     }, 
 
     success: callback 
 
    }); 
 
} 
 

 
function salvar() { 
 
    var resultado = false; 
 
    ... 
 
    salvarInformacoes(JSON.stringify(pedidos), JSON.stringify(ums), myCallback); 
 
    
 
    function myCallback(retorno) { 
 
     if (retorno.success != false) { 
 
      ... 
 
     } 
 
     else { 
 
      resultado = false; 
 
      return; 
 
     } 
 

 
     resultado = true; 
 
    } 
 
    
 
    return resultado; 
 
} 
 
    ...

Перед методом "myCallback" называется , функция возвращает false. Таким образом, код внутри заявления ниже никогда не выполняется:

if (salvar()) { 
 
    ... 
 
}

ответ

1

Что такое лучший способ решить это?

Не использование async: false.

Браузер не отображает изменения, поскольку async: false делает операцию не асинхронной и блокирует браузер. Сохраняйте асинхронный асинхронный код, и вы можете выполнять другие действия во время выполнения этого кода.

Мне нужно подождать ответа, чтобы узнать, к какому пути идти.

Это результат дефекта дизайна где-то в коде. Вы можете попробовать посмотреть the question and answers here за помощью. По сути, вы не хотите блок код на стороне клиента, ожидая ответа, но вместо этого хотите обработать ответ, когда он поступит.

+0

Спасибо за ответ. Я изучаю этот пост. Я еще не понимаю, что я могу сделать, когда мой вызов будет в цикле (для). Я могу сделать это без async? –

+0

@CarlosHenriqueBiazinEsteves: Ну, поскольку здесь нет информации о том, что вы пытаетесь сделать, я не могу сказать вам, как это сделать. Но для вопроса, который задают вопрос, ответ заключается в том, что вы блокируете браузер от продолжения, поэтому он не продолжает следующую операцию. В общем, это очень плохой дизайн (вот почему вы столкнулись с этой проблемой) и не должны использоваться в первую очередь. – David

+0

Я отредактировал мой пост, потому что я до сих пор не могу понять, как это сделать ... –