【问题标题】:async ajax call - show loading gif异步 ajax 调用 - 显示加载 gif
【发布时间】:2017-02-20 18:04:00
【问题描述】:

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

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

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

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

最好的解决方法是什么?

编辑 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()) {
  ...
}

【问题讨论】:

    标签: ajax asp.net-mvc


    【解决方案1】:

    最好的解决方法是什么?

    不要使用async: false

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

    我需要等待答案才能知道该走哪条路。

    这是代码中某处设计缺陷的结果。您可以尝试通过the question and answers here 寻求帮助。本质上,您不希望在等待响应时阻塞客户端代码,而是希望在响应到达时对其进行处理。

    【讨论】:

    • 感谢您的回答。我正在研究帖子。我还不明白当我的呼叫进入循环(for)时我能做什么。没有异步我不可能做到这一点?
    • @CarlosHenriqueBiazinEsteves:嗯,因为这里没有关于你想要做什么的信息,所以我真的不能告诉你怎么做。但是对于被问到的问题,答案是您阻止浏览器继续,这就是它不继续进行下一个操作的原因。一般来说,这是一个非常糟糕的设计(这就是您遇到此问题的原因),一开始就不应该使用。
    • @CarlosHenriqueBiazinEsteves:您现在要问的是与此完全相同的内容:stackoverflow.com/questions/14220321/… 您无法立即检查异步操作的结果,因为该操作可能还没有完成。该问题中的答案非常详细地介绍了如何响应异步操作,这在结构上与从函数“返回”(这是您当前尝试做的)根本不同。在其当前结构中,salvar()始终返回 false。
    • 感谢您的帖子。我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多