1

Есть две функции

<script type="text/javascript">
    function updateGridView() {
        LoadingPanel.Show();
        $("form#form-grid-partial-view-refresh").ajaxSubmit({
            url: '@Url.Action("GridViewPartial")',
            asynk: false,
            success: function(html) {
                $('#partialViewDiv').html(html);
                LoadingPanel.Hide();
            }
        });
    }

    function toExcel() {
        updateGridView();
        $("form#form-grid-partial-view-refresh").submit();
    }

</script>

updateGridView выполняет обычный поиск и выводит результат

toExcel выполняет поиск выводит результат и выгружает его в эксель

При вызове функции toExcel я ожидаю что вначале выполнится поиск через updateGridView, потом пойдет выгрузка в эксель, но этого не происходит. А получается что вызывается урл из updateGridView и сразу же (не дожидаясь результата) вызывается субмит для выгрузки в эксель. Почему так ?

  • https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – hindmost Jul 07 '17 at 09:03

2 Answers2

1

Потому что запрос выполняется ассинхронно, напиши async: false

1

Да, в js функции асинхронны. Используй async/await

<script src="https://cdnjs.cloudflare.com/ajax/libs/async/2.5.0/async.min.js"></script>
// или npm 

<script>    
    async function toExcel() {
        var result = await updateGridView();
        $("form#form-grid-partial-view-refresh").submit();
    }
</script>
Tvolex
  • 518
  • 4
  • 17