Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy jest możliwość ładowania pliku przez strone internetowa za pomoca AJAXa
Forum PHP.pl > Forum > XML, AJAX > AJAX
Sokrates
Witam, mam taki problem związany z AJAXem,
a mianowicie mam formularz
  1. <form id="CP::AddNew" enctype="multipart/form-data" method="post" action="myadmin.php?act=0&id=5">
  2. Dodaj Baner:<br />
  3. <input type="file" size="107" name="upload" class="form" value="" />
  4. <input type="button" value="Zapisz" name="save" class="button" onclick="sendForm('CP::AddNew');" />
  5. </form>


który obsługuje taki skrypt javascript w powiązaniu z ADVAJAX
  1. function sendForm( id )
  2. {
  3. advAJAX.submit(document.getElementById(id), {
  4. onSuccess : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '' + convertHTML(obj.responseText) + ''; },
  5. onLoading : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '<div class="wait"><!-- --></div>'; },
  6. onError : function(obj) { document.getElementById( 'CP::ContentPanel' ).innerHTML = '<div class="error"><!-- --></div>'; }
  7. });
  8. }


Problem w tym że w powyższym przypadku jak wysyłam formularz do skryptu PHP
nie otrzymuje informacji z INPUTa typu FILE a dokładnie zmiennej $_FILES (w PHP)

Po zmianie ostatniego INPUTa w formularzu na
  1. <input type="submit" value="Zapisz" name="save" class="button" />

następuje przeładowanie strony i wtedy wszystko jest OK. Dostaję informacje na temat
załadowanego pliku z powyższego inputa.

Więc stąd moje stwierdzenie że to wina AJAXa.

Czy ktoś wie jak to można obejść, czy jest w ogóle możliwość załadowania pliku metoda AJAX
(bez przeładowywania strony).
Może trzeba jakoś inaczej napisać funkcję JavaScript.

Wielkie dzięki za pomoc,
Pozdrawiam
wookieb
Nie ma takiej możliwości. Firefox blokuje wysyłanie plikóe przez JS. na IE bodajże pojdzie.
Sokrates
Czyli że co nie ma możliwości przesłania pliku po przez AJAX...
ucho
Umieść formularz w iframe, ukryj po wysłaniu - nawet FF nie będzie mógł mieć nic przeciwko smile.gif Po załadowaniu pliku wysyłasz kod JS który wywołany w tym niewidocznym Iframe wywoła funkcję z głównej ramki która już normalnie ajaxem zaciągnie np. wynik obróbki pliku
Sokrates
Cytat(ucho @ 22.08.2008, 09:02:30 ) *
Umieść formularz w iframe, ukryj po wysłaniu - nawet FF nie będzie mógł mieć nic przeciwko smile.gif Po załadowaniu pliku wysyłasz kod JS który wywołany w tym niewidocznym Iframe wywoła funkcję z głównej ramki która już normalnie ajaxem zaciągnie np. wynik obróbki pliku


Możesz jakoś jaśnie to opisać.
Bo nic z tego nie zrozumiałem ....
nexis
Polecam SWFUpload
paziek
Nie polecam Flasha, jeśli da się inaczej.
iframe w tej chwili jest znacznie lepszym rozwiazaniem.
LBO
Cytat(wookieb @ 22.08.2008, 00:03:04 ) *
Nie ma takiej możliwości. Firefox blokuje wysyłanie plikóe przez JS. na IE bodajże pojdzie.


To są względy bezpieczeństwa i działają chyba na każdej przeglądarce. JavaScript nie ma dostępu do pól typu file, bo wyobraźcie sobie sytuację, gdy wysyłacie zdjęcia na jakieś forum, a to JS podmienia adresy djęć na adresy jakiś ważnych plików.
paziek
Cytat(LBO @ 23.08.2008, 20:17:21 ) *
To są względy bezpieczeństwa i działają chyba na każdej przeglądarce. JavaScript nie ma dostępu do pól typu file, bo wyobraźcie sobie sytuację, gdy wysyłacie zdjęcia na jakieś forum, a to JS podmienia adresy djęć na adresy jakiś ważnych plików.


Niby tak, ale możliwość odczytywania wybranego pliku chociażby dali. Skoro ktoś chciał go uploadować tradycyjnym sposobem, to i tak by się znalazł na serwerze. A, że najpierw przeleci przez JS..

W Firefoxie można skorzystać z API od obsługi plików, ale user musi najpierw wyrazić zgodę na nadanie dodatkowych uprawnień stronie - a zgoda jest pamięŧana tylko na czas sesji (czy nawet odświerzenia?). Nie to co z Javą.. gdzie jest pamięŧana, a do tego dajesz zgodę na praktycznie pełną kontrole PCeta.
Czasami posunięcia producentów przeglądarek są niejasne - przynajmniej z punktu widzenia webdevelopera.
Sokrates
Mimo wszystko wydaje mi się że jest możliwość
załadowania pliku po przez AJAX.

Ten link jest tego świetnym przykładem.
http://demo.swfupload.org/applicationdemo/index.php
LBO
Tak?
To teraz proponuję zrobić teścik.
1. Wyłącz flasha?
2. Albo JS.

Na przedstawionym demie nawet nie będzie jak załadować pliku standardowo. Możliwe, że do obejścia, ale tak czy siak - trzeba będzie zrobić upload również tradycyjnie.
Edric
Da się!
Swego czasu zadałem takie pytanie na forum
advAJAX i przesyłanie plików
i też uzyskałem odpowiedzi, że się nie da. Poszukałem trochę i.. znalazłem. Rozwiązanie jest w moim ostatnim poście.
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.