Можете ли да използвате Javascript, за да откриете прозорец за изтегляне на файл, създаден от страна на сървъра?

Имам плъгин jQuery, който използвам за динамично създаване и изобразяване на формуляр на страница asp.net default.aspx, след което го изпращам. Страницата, на която се изпраща, е страница pdf.aspx. Страницата създава PDF, след което използва Response.Write, за да напише файла (приложение/pdf) в браузъра. Използвам същия метод и за изобразяване на XLSX файлове в браузъра. Работи наистина страхотно, но имам нужда от обратно извикване или някакво събитие, за да кажа на бутона кога да спре да се върти. Това не позволява на потребителя да щраква непрекъснато върху бутоните Excel или PDF. Някой знае ли начин за откриване на диалоговия прозорец на файла, когато не е създаден с помощта на javascript? Също така съм отворен за други методи за обратно извикване от страната на сървъра.


person Zacho    schedule 16.06.2010    source източник
comment
Вижте stackoverflow.com/questions/666468/   -  person Crescent Fresh    schedule 16.06.2010
comment
Това решение звучи страхотно, но не ми е ясно относно частта за зареждане. Независимо дали iframe се зарежда при зареждане на страницата или се създава динамично в JS, зареждането се случва още преди формулярът да бъде изпратен. какво ми липсва   -  person Zacho    schedule 16.06.2010
comment
възможен дубликат на Откриване, когато браузърът получава изтегляне на файл   -  person Liam    schedule 24.04.2014


Отговори (1)


Начинът, по който правя това, беше предложен в отговор на въпрос, който зададох тук преди малко от T.J. Crowder. Не мога да намеря отговора от последния път, когато написах това, защото инструментът за „търсене“ на Stackoverflow е толкова невероятно куц, така че вероятно ще напиша публикация в блога. Основната идея е, че вашият клиентски код (Javascript) трябва да добави допълнителен параметър, когато изпраща заявката за изтегляне. Параметърът трябва да съдържа някакъв генериран произволен низ (вероятно само текущото времево клеймо е достатъчно добро). След това сървърът търси този параметър и когато подготвя отговора с файла за изтегляне, той също задава бисквитка и й дава тази произволна стойност.

Веднага след изпращането (или точно преди; това няма особено значение), кодът на Javascript трябва да стартира интервален таймер с рутина, за да прегледа стойността на document.cookie и да види дали съдържа този произволен низ. Веднага щом бисквитката съдържа този низ, тогава знаете, че сървърът е изпратил обратно отговора си и че е представен диалоговият прозорец за изтегляне на файл.

person Pointy    schedule 16.06.2010
comment
Това е смешно. Опитах точно това решение вчера, тъй като това беше единственото, което измислих. След като зададох бисквитката от страна на сървъра, аз се ориентирах към страната на клиента, търсейки я с помощта на: setTimeout(complete = checkCookie(fileComplete), 2000); на всеки 2 секунди. Това не проработи, защото не можах да прочета клиентската страна на бисквитките. Може би ще се задълбоча в тази идея и ще опитам отново днес. Ако работи, ще ви уведомя. - person Zacho; 16.06.2010
comment
Е, ако създадете произволен низ на клиента, всъщност дори не е нужно да търсите конкретна бисквитка - можете просто да погледнете document.cookie. Също така се уверете, че вашият сървър не прави бисквитките ви да са само http, в противен случай вашият скрипт не може да ги види! Тази техника работи като шампион за мен. - person Pointy; 16.06.2010