Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 23.04.2007 Ostrzeżenie: (0%)
|
Witam.
Staram się w swoim projekcie zastosować przesyłanie plików na serwer bez przeładowywania strony. Chciałem do tego wykorzystać bibliotekę advAJAX. Kod na którym eksperymentuje, wygląda następująco: formularz.html:
plik.php:
Wywołanie window.onload = przeslij; sprawia, że obsługę formularza przejmuje advAJAX. Gdy wywołanie to jest aktywne, to jako odpowiedź otrzymuję: "array(0) { }", czyli php nie stwierdziło żadnych plików do przesłania. Gdy wywołanie window.onload = przeslij; usuwam, formularz obsługiwany jest standardowo i po otwarciu nowej strony mam: array(1) { ["username"]=> array(5) { ["name"]=> string(15) "Clipboard01.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(74) "C:\Documents and Settings\Edric\Ustawienia lokalne\Temp\php218.tmp" ["error"]=> int(0) ["size"]=> int(250548) } czyli formularz działa prawidłowo. Wygląda na to, że advAJAX nie potrafi obsługiwać przesyłania plików.. albo ja robie coś źle. I tu pytanie - co zrobić żeby to zadziałało? Dodam jeszcze, że jeśli zmienię typ input na 'text', i sprawdzę zmienną $_POST po przesłaniu za pomocą advAJAX to wszystko działa dobrze. Może zna ktoś jakiś inny obiekt AJAX, który pomógłby mi to zrealizować? Próbowałem problem rozwiązać w inny sposób, ale na drodze stanęła mi Opera i jej obsługa inputów dla plików (pytanie na ten temat również znajduje się na forum. Bardzo proszę o pomoc, bo naprawdę nie wiem jak ten problem rozwiązać. Niestety nie wiem, jak to wygląda z advAJAX, ale znalazłem coś co prawdopodobnie rozwiązuje ten problem: http://en.dklab.ru/lib/JsHttpRequest/" title="Zobacz w manualu PHP" target="_manual Ten post edytował Edric 10.06.2008, 14:58:53 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%)
|
NIestety, ale AJAX jak i cała JavaScript nie obsługuje przesyłania plików. Jeśli zależy Ci na przesyłaniu formularza z plikiem bez przeładowania strony, musisz zastosować ukrytą ramkę (np 1px x 1px) i do niej normalnie submitować formularz.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 23.04.2007 Ostrzeżenie: (0%)
|
NIestety, ale AJAX jak i cała JavaScript nie obsługuje przesyłania plików. Jeśli zależy Ci na przesyłaniu formularza z plikiem bez przeładowania strony, musisz zastosować ukrytą ramkę (np 1px x 1px) i do niej normalnie submitować formularz. Ajax czy też JS jako taki nie. Ale jak widać w moim przykładowym kodzie, AJAX potrafi wywoływać asynchroniczie kod PHP, który wysyłaniem plików spokojnie może się zająć (do tego ma przecież zmienną $_FILES). No i istnieje coś takiego jak <input type='file'/> co pozwala na pobranie nazwy pliku z dysku lokalnego za pomocą przeglądarki. Problem tkwił w tym, że biblioteka, z której korzystałem (advAJAX) akurat z przesyłaniem plików sobie nie radzi. Niemniej znalazłem bibliotekę która to umożliwia - http://en.dklab.ru/lib/JsHttpRequest . Jak znajdę chwilę czasu to wrzucę tu kod pozwalający z jej pomocą na kopiowanie plików na serwer bez przeładowywania strony i bez ukrytych ramek. Nie działa, bo w ten sposób normalnie mógłbyś przeglądać sobie kompa użytkownika, a tego byś jako przeglądający przecież nie chciał. Niestety nie rozumiem... Kod który piszę, ma pozwalać na przesłanie pliku z dysku lokalnego na serwer, bez przeładowania strony. Przeglądanie własnego dysku, to chyba nie problem - umożliwia to input z type='file'. Ten post edytował Edric 11.06.2008, 12:30:06 |
|
|
|
Edric advAJAX i przesyłanie plików 10.06.2008, 16:23:54
simple programmer Nie działa, bo w ten sposób normalnie mógłbyś prze... 10.06.2008, 18:38:40
wlamywacz Nie zrobisz tego w ten sposób po prostu - względy ... 12.06.2008, 22:07:20 
Edric Cytat(wlamywacz @ 12.06.2008, 23:07:2... 14.06.2008, 12:41:00
protheo Cytat(Edric @ 11.06.2008, 12:17:43 ) ... 10.12.2009, 14:46:47 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 08:43 |