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:

<form method="POST" action="javascript:openfile('upload.php');" enctype="multipart/form-data" onsubmit="return ExtensionsOkay(this);">
  <table align="center">
    <tr>
       <td align="center"><b>FELTÖLTÉS</b></td>
    </tr>
    <tr>
       <td align="center"><input type="file" name="image"></td>
    </tr>
    <tr>
       <td align="left"><input type="Submit" name="Submit" value=" FELTÖLT "></td>
    </tr>
</table>
</form>

<p><span id="valasz"></span></p>
az openfile('upload.php') erre hivatkozik:

function getXmlHttpRequestObject() {

  var XMLHttp = null;
  if (window.XMLHttpRequest) {
    try {
      XMLHttp = new XMLHttpRequest();
    } catch (e) { }
  } else if (window.ActiveXObject) {
    try {
      XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  return XMLHttp;
}

var http = getXmlHttpRequestObject();


function openfile(path) {
 http.open('post', path, true);
 http.onreadystatechange = handleOpen;
 http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
 http.send(document.getElementById("image").value);
}

function handleOpen() {
 if (http.readyState == 4) {
  var response = http.responseText;
  document.getElementById('valasz').innerHTML = "kész!";
 }
}
és az upload.php-ben át kéne venni valahogy, egy tutorialban így csinálták:

$posted = &$_POST;
$adat = $posted["image"];
a gond az, hogy az &adat nem kap értéket, másrészt meg nem tudom, hogyan építsem be ide:

$userfile_name = $_FILES['image']['name'];
$userfile_tmp = $_FILES['image']['tmp_name'];
$userfile_size = $_FILES['image']['size'];
$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:

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:

$userfile_name = $_FILES['image']['name'];  
$userfile_tmp = $_FILES['image']['tmp_name'];  
$userfile_size = $_FILES['image']['size'];  
$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. :)