ugrás a tartalomhoz

PHP / AJAX feltöltés

DarkRaptor · 2008. Szep. 7. (V), 18.01
Sziasztok!

most kezdtem el az AJAX tanulását és beleütköztem egy kis problémába. Azt szeretném csinálni, hogy ha a felhasználó rákattint a feltöltés gombra, akkor az AJAX futtassa le az upload.php fájlt és miután az feltöltötte a fájlt, akkor írja ki, hogy feltöltve. Egyszerüen nem boldogulok vele. Eddig jutottam:

űrlap:
  1. <form method="POST" action="javascript:openfile('upload.php');" enctype="multipart/form-data" onsubmit="return ExtensionsOkay(this);">  
  2.   <table align="center">  
  3.     <tr>  
  4.        <td align="center"><b>FELTÖLTÉS</b></td>  
  5.     </tr>  
  6.     <tr>  
  7.        <td align="center"><input type="file" name="image"></td>  
  8.     </tr>  
  9.     <tr>  
  10.        <td align="left"><input type="Submit" name="Submit" value=" FELTÖLT "></td>  
  11.     </tr>  
  12. </table>  
  13. </form>  
  14.   
  15. <p><span id="valasz"></span></p>  
az openfile('upload.php') erre hivatkozik:
  1. function getXmlHttpRequestObject() {  
  2.   
  3.   var XMLHttp = null;  
  4.   if (window.XMLHttpRequest) {  
  5.     try {  
  6.       XMLHttp = new XMLHttpRequest();  
  7.     } catch (e) { }  
  8.   } else if (window.ActiveXObject) {  
  9.     try {  
  10.       XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");  
  11.     } catch (e) {  
  12.       try {  
  13.         XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");  
  14.       } catch (e) { }  
  15.     }  
  16.   }  
  17.   return XMLHttp;  
  18. }  
  19.   
  20. var http = getXmlHttpRequestObject();  
  21.   
  22.   
  23. function openfile(path) {  
  24.  http.open('post', path, true);  
  25.  http.onreadystatechange = handleOpen;  
  26.  http.setRequestHeader("Content-Type""application/x-www-form-urlencoded");   
  27.  http.send(document.getElementById("image").value);  
  28. }  
  29.   
  30. function handleOpen() {  
  31.  if (http.readyState == 4) {  
  32.   var response = http.responseText;  
  33.   document.getElementById('valasz').innerHTML = "kész!";  
  34.  }  
  35. }  
és az upload.php-ben át kéne venni valahogy, egy tutorialban így csinálták:
  1. $posted = &$_POST;  
  2. $adat = $posted["image"];  
a gond az, hogy az &adat nem kap értéket, másrészt meg nem tudom, hogyan építsem be ide:
  1. $userfile_name = $_FILES['image']['name'];  
  2. $userfile_tmp = $_FILES['image']['tmp_name'];  
  3. $userfile_size = $_FILES['image']['size'];  
  4. $userfile_type = $_FILES['image']['type'];  
segítségeteket előre is köszönöm!
 
1

még valami...

DarkRaptor · 2008. Szep. 8. (H), 09.49
az ajax résznél van ez:
  1. http.send(document.getElementById("image").value);  
természetesen létezik az id="image" is, csak a fönnti űrlapból véletlenül kihagytam, úgyhogy a probléma nem ebből adódik :(
2

Nem fog menni

janoszen · 2008. Szep. 8. (H), 10.01
AJAX-al nem tudsz fájlt feltölteni. Csináld úgy hogy egy rejtett iframet hozol létre, abba elpostolod a kérést, amire a válasz egy JS kód, ami belerúg a külső ablakban futó JS függvénybe, hogy végzett.

Ezek után tüntesd el az iframet (vedd ki a DOM fából), különben nem fog működni a back gomb. Arra is figyelj, hogy az iframe eltűntetése legyen az utolsó, különben Operában megszűnik a függvény futása. :)
3

nem lehet? pedig...

DarkRaptor · 2008. Szep. 8. (H), 11.03
olyat már csináltam, hogy egy linkre kattintva betöltöttem ajax-al egy php fájlt, ami adatbázisból lekért adatokat és azt kilistáztam egy divbe. (mindez persze ugyanazon az oldalon, oldalújratöltés nélkül).

ezért gondoltam azt, hogy ez is megvalósítható lenne ajax-al, hiszen a feltöltést a php végezné, csak valahogy át kéne postolnom ajax-al az upload.php-ba az adatokat és beleépítenem ebbe:
  1. $userfile_name = $_FILES['image']['name'];    
  2. $userfile_tmp = $_FILES['image']['tmp_name'];    
  3. $userfile_size = $_FILES['image']['size'];    
  4. $userfile_type = $_FILES['image']['type'];    
iframe-el megoldható persze, azzal menne is simán, de most ajax-al szeretném ezt véghezvinni. Elvégre követni kéne a technikát :D
4

Nem megy

janoszen · 2008. Szep. 8. (H), 11.27
Mivel a fájl feltöltő mezőből nem tudsz JS-sel olvasni, ez még a kisebbik probléma, de a lemezről se tudsz olvasni, úgyhogy a requestet össze se tudnád rakni. Security rulez. :)