Нужно событие javascript после возврата mvc FileResult

Мое приложение выполняет form.submit(), которое вызывает действие, которое возвращает FileResult (вложение). Перед отправкой у меня есть javacript, который выводит div «подождите». Мне нужно очистить его, когда результат будет возвращен. Для действий, которые возвращают ответ, который записывает страницу, я использую событие window.onload для очистки div, но это событие не срабатывает, когда возвращается вложение.

Это не работает, чтобы сделать что-то вроде form.submit();HidePleaseWait(), потому что отправка асинхронна. Есть ли какое-то другое событие, которое срабатывает при возврате вложения? Или есть ли способ объединить несколько ActionResult, чтобы я мог обновить страницу в одном ответе?


person Elroy Flynn    schedule 08.01.2012    source источник


Ответы (2)


Если вы используете jQuery, вам следует сделать следующее.

$('selector').submit(function(event){
    event.preventDefault();
    // @Hiding
    // Do your AJAX call
    $.ajax({
        url: "test.html",
        success: function(){
            // @What to do when done
        }
    });
});
person Fabián Heredia Montiel    schedule 08.01.2012
comment
Что бы я сделал в блоке «что делать, когда готово»? Я знаю, что могу скрыть свой div, пожалуйста, подождите, но мне также придется обрабатывать ответ на вложение. Я знаю, как обращаться с обычными ответами, которые заставят меня, например, заменить контент, но я не знаю, как справиться с этим. - person Elroy Flynn; 09.01.2012
comment
Что ж, если вы хотите отправить форму БЕЗ перезагрузки страницы, вы должны изменить ее на вызов AJAX. Это предотвращает переход браузера на адрес действия. - person Fabián Heredia Montiel; 09.01.2012
comment
Я не думаю, что ваш ответ решает мою проблему, если вы не можете описать, как обрабатывать результат вложения. - person Elroy Flynn; 09.01.2012
comment
успех (данные, textStatus, jqXHR) Вы можете получать данные и обрабатывать их с помощью jQuery. Просто измените анонимную функцию на 3 аргумента. - person Fabián Heredia Montiel; 09.01.2012
comment
Похоже, что невозможно обработать ответ на вложение (загрузку) в ajax. [stackoverflow.com/questions/7464665/< /а>. Так что, к сожалению, я все еще застрял. - person Elroy Flynn; 09.01.2012

Я знаю, что это старый пост, но у меня была такая же потребность, и я нашел кое-что, что может заинтересовать кого-то в будущем.

Я нашел там решение: https://www.codeproject.com/Articles/1095434/Show-an-animation-while-waiting-for-a-download-to

Мне просто нужно было добавить window.clearInterval(_tmr), чтобы останавливать проверку каждые 100 мс, и document.cookie = 'dlc= ; expires = Thu, 01 Jan 1970 00:00:00 GMT', чтобы очистить куки.

Итак, мой окончательный код выглядит так:

var _tmr;

$('form').submit(function () {
    if (!_tmr) {
        $('#cookieValue').val(Date.now().toString());

        _tmr = window.setInterval(VerifyEnd, 100);
    }
});

function VerifyEnd() {
    var _str = 'dlc=' + $('#cookieValue').val();
    if (document.cookie.indexOf(_str) !== -1) {
        $('body').removeClass("loading");
        window.clearInterval(_tmr);
        document.cookie = 'dlc= ; expires = Thu, 01 Jan 1970 00:00:00 GMT';
        _tmr = null;
    }
}
person Philippe Veilleux-Girard    schedule 29.07.2020