Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Jak zwrócić plik (download) odebrany ajaxem?
Forum PHP.pl > Forum > Przedszkole
koszykarze
kontroler (symfony) zwraca mi plik:
  1. return $this->file($filename, $fileTitle);

i dopóki ten kontroler wywołuję przez link:
  1. <a href="https://foo.pl/nk/dowloaddocument/#=doc_id#">

to po nacisnięciu linka w odpowiedzi przeglądarka zapisuje plik.

Ale chciałbym to zrobić ajaxem (by przesłać do kontrolera dodatkowe informacje w POST). Ale jak zwrócić plik po otrzymaniu odpowiedzi w ajax.success?
  1. $.ajax({
  2. url: URL + 'foo/' + data.doc_id,
  3. type: 'POST',
  4. dataType: 'json',
  5. data: {
  6. 'user': user,
  7. 'key': '13432342314214',
  8. },
  9. success: function (response) {
  10. return response
  11. //window.location = URL + 'foo/' + data.doc_id; //ta metoda (stackoverflow) częściowo działa ale wysyłane są 2 żądania i nie zapisuje pliku, ale w zakładce chrome preview widzę plik
  12. }
  13. }
gorden
Jeśli chodzi o rozpoczęcie pobierania, to nie da się. Zrób to za pomocą formularzy.
Jeśli masz wiele różnych plików do pobrania, to podmieniaj action na:
Kod
URL + 'foo/' + data.doc_id

i rób submit.

W odpowiedzi daj treść pliku, razem z odpowiednimi nagłówkami, by rozpocząć pobieranie i nie przeładować strony.
koszykarze
Cytat(gorden @ 30.07.2018, 13:51:39 ) *
W odpowiedzi daj treść pliku, razem z odpowiednimi nagłówkami, by rozpocząć pobieranie i nie przeładować strony.

możesz podać przykład?
gorden
  1. header('Content-Type: ' . $typ_mime_pliku);
  2. header('Content-Disposition: attachment; filename="' . $nazwa_pliku . '"');
  3. header('Content-Length: ' . $rozmiar_pliku_w_bajtach); //niewymagane, ale wtedy użytkownik nie zobaczy rozmiaru
  4.  
  5. echo $zawartosc_pliku;
sabat24
Od frontu ja to robiłem zawsze na dynamicznej ramce pływającej zamiast formularzy, ale generalnie na jedno prawie wychodzi.
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.