MiXen
26.07.2012, 19:42:24
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
26.07.2012, 21:21:03
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
26.07.2012, 22:10:35
A teraz z polskiego na nasze mógłbyś wytłumaczyć jak to zrobić?
vokiel
27.07.2012, 08:22:56
Masz adres do pliku rar, tak?
function sendFile(fileName){
var url = '/public/files/' + fileName;
var downloadIframe = document.getElementById( 'downloadIframe' );
if ( !downloadIframe ){
downloadIframe = document.createElement( 'iframe' );
downloadIframe.setAttribute( 'id', 'downloadIframe' );
downloadIframe.style['display'] = 'none';
document.getElementsByTagName('body')[0].appendChild( downloadIframe );
}
downloadIframe.setAttribute( 'src', url );
}
sendFile('plik.rar');
Oczywiście ścieżki, weryfikację poprawności, uprawnienia, dostęp itd już zostawiam Tobie.
erix
27.07.2012, 09:09:31
Ale co po tym, że prześlesz, jak potem trzeba tego przecież jakoś użyć...
MiXen
30.07.2012, 13:02:59
Niestety, ale to nie działa.
vokiel
30.07.2012, 17:04:56
Nie działa bo? Jakiś błąd, komunikat, wynik cokolwiek? Czy nie działa "bo nie!"?
MiXen
5.08.2012, 22:12:56
Przepraszam

Zapomniałem włączyć firebuga;)
TypeError: document.getElementsByTagName("body")[0] is undefined
[Wstrzymuj na tym błędzie]
document.getElementsByTagName('body')[0].appendChild( downloadIframe );
Nikt mi nie jest w stanie pomóc z tym problemem?
vokiel
6.08.2012, 07:42:07
Otwórz firebuga, ustaw na konsolę i zobacz co się pojawi:
http://jsfiddle.net/MuhZN/
MiXen
6.08.2012, 21:40:02
No pokazuje się to samo, co przesłałem w poprzednim poście.
vokiel
7.08.2012, 08:06:10
A z jakiej przeglądari korzystasz?
MiXen
7.08.2012, 18:27:52
Używam firefoxa.
sazian
7.08.2012, 21:10:40
głupie pytanie
czy funkcję wywołujesz w onload lub $(document).ready();
MiXen
10.08.2012, 20:02:20
Nie za bardzo wiem o co chodzi, ale po prostu wywołuję ją normalnie. Kod jest w <script ...></script>
erix
11.08.2012, 16:01:41
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
11.08.2012, 20:13:00
@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
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.