2017-02-20 67 views
0

我使用ajax在我的控制器中調用POST方法。平均而言,此方法運行15到20秒。async ajax call - 顯示加載gif

我在該調用中使用了aync 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()) { 
 
    ... 
 
}

回答

1

什麼是解決這個問題的最好方法?

不要使用async: false

瀏覽器不顯示更改,因爲async: false使操作不是異步並鎖定瀏覽器。保持異步代碼異步,並且可以在代碼執行時做其他事情。

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

這是代碼中某處設計缺陷的結果。您可以嘗試通過the question and answers here尋求幫助。本質上,您不希望在等待響應時阻止阻止客戶端代碼,而是希望在響應到達時處理響應。

+0

感謝您的回答。我正在研究這個帖子。我不明白當我的電話進入循環(for)時我該怎麼辦。我可能沒有異步做到這一點? –

+0

@CarlosHenriqueBiazinEsteves:好吧,既然這裏沒有關於你想要做什麼的信息,我真的不能告訴你如何去做。但對於被問到的問題,答案是您阻止瀏覽器繼續執行,這就是爲什麼它不會繼續執行下一個操作。從一般意義上講,這是一個非常糟糕的設計(這就是爲什麼你遇到過這個問題),不應該放在首位。 – David

+0

我編輯我的帖子,因爲我仍然無法弄清楚如何做到這一點... –