Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ajax a pobieranie pliku rar
Forum PHP.pl > Forum > XML, AJAX
MiXen
Witam! Przepisałem swoją stronę całkowicie na obsługę ajaxa pod JQuery. Jednak został mi jeden problem. Posiadam dział download, gdzie można pobrać pliki, zwykle rar. Kiedyś robiłem to przez zwykłe hiperłączę, albo poprzez header Location. Teraz niestety nie działa tak. Dodam, że plik, który ma ten skrypt jest wywoływany ajaxem a konkretnie funkcją $.load. Czy ktoś mi może z tym problemem pomóc?
vokiel
Przesyłanie danych binarnych ajaxem jest dość problematyczne, szybkim i sprawnym rozwiązaniem jest utworzenie ukrytej ramki i danie do niej src do pliku.
MiXen
A teraz z polskiego na nasze mógłbyś wytłumaczyć jak to zrobić?wink.gif
vokiel
Masz adres do pliku rar, tak?

[JAVASCRIPT] pobierz, plaintext
  1. function sendFile(fileName){
  2. var url = '/public/files/' + fileName;
  3. var downloadIframe = document.getElementById( 'downloadIframe' );
  4. if ( !downloadIframe ){
  5. downloadIframe = document.createElement( 'iframe' );
  6. downloadIframe.setAttribute( 'id', 'downloadIframe' );
  7. downloadIframe.style['display'] = 'none';
  8. document.getElementsByTagName('body')[0].appendChild( downloadIframe );
  9. }
  10. downloadIframe.setAttribute( 'src', url );
  11. }
  12.  
  13. sendFile('plik.rar');
[JAVASCRIPT] pobierz, plaintext


Oczywiście ścieżki, weryfikację poprawności, uprawnienia, dostęp itd już zostawiam Tobie.
erix
Ale co po tym, że prześlesz, jak potem trzeba tego przecież jakoś użyć...
MiXen
Niestety, ale to nie działa.
vokiel
Nie działa bo? Jakiś błąd, komunikat, wynik cokolwiek? Czy nie działa "bo nie!"?
MiXen
Przepraszam wink.gif Zapomniałem włączyć firebuga;)
  1. TypeError: document.getElementsByTagName("body")[0] is undefined
  2. [Wstrzymuj na tym błędzie]
  3.  
  4. document.getElementsByTagName('body')[0].appendChild( downloadIframe );


Nikt mi nie jest w stanie pomóc z tym problemem?
vokiel
Otwórz firebuga, ustaw na konsolę i zobacz co się pojawi: http://jsfiddle.net/MuhZN/
MiXen
No pokazuje się to samo, co przesłałem w poprzednim poście.
vokiel
A z jakiej przeglądari korzystasz?
MiXen
Używam firefoxa.
sazian
głupie pytanie
czy funkcję wywołujesz w onload lub $(document).ready(); questionmark.gif
MiXen
Nie za bardzo wiem o co chodzi, ale po prostu wywołuję ją normalnie. Kod jest w <script ...></script>
erix
No tak, tylko że jeśli nie skorzystasz z eventu ready, a element jeszcze nie został zrenderowany przez przeglądarkę (kod jest wykonywany od góry do dołu), to nie dziw się, że nie zadziała.
MiXen
@up
To nie było problemem, ale problem leżał w znaczniku body. Troszkę zmieniłem i działa, ogólnie mówiąc dzięki wielkie za pomoc wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.