async ajax call - show loading gif

时间:2017-02-20 18:04:00

标签: ajax asp.net-mvc

我正在使用ajax在我的控制器中调用POST方法。平均而言,此方法运行15到20秒。

我在该呼叫中使用了aync false,因为我需要等待答案才知道要走哪条路。但是,当我使用async false时,我的加载(gif)没有显示。

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

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

解决问题的最佳方法是什么?

编辑1

我有执行多个验证的save函数并在控制器中调用该方法:

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 个答案:

答案 0 :(得分:1)

  

解决问题的最佳方法是什么?

不要使用async: false

浏览器未显示更改,因为async: false使操作非异步并锁定浏览器。保持异步代码异步,并且在执行代码时可以执行其他操作。

  

我需要等待答案,知道要走哪条路。

这是代码中某处设计缺陷的结果。您可以尝试查看the question and answers here以获得一些帮助。基本上,您不希望在等待响应时阻止客户端代码,而是希望在响应到来时处理响应。