2013-07-09 10 views
6

Wiem, że otrzymałem już pytanie dotyczące tego problemu, ale nadal nie mogę tego zrobić poprawnie. Potrzebuję pomocy.Umieszczanie pliku wejściowego w jquery FormData do przesłania do PHP

Muszę przesłać plik z dodatkowymi danymi.

mój input.php:

<input type="file" id="foto_path" name="foto_path" /> 
<input type="button" value="Add" onclick="javascript:sendForm()" /> 

wyślę że z javascript:

function sendForm() { 
    var fileInput = document.querySelector('#foto_path'); 
    var oMyForm = new FormData(); 
    var nip=123223374;//it will be generated by php, for temporary i just hardcode it 
    oMyForm.append("foto_path", fileInput); 
    oMyForm.append("nip",nip); 
    var oReq = new XMLHttpRequest(); 
    oReq.open("POST", "upload-file.php", true); 
    oReq.onload = function(oEvent) { 
     if (oReq.status == 200) { 
      //oOutput.innerHTML = "Uploaded!"; 
      alert('success'); 
     } else { 
      //oOutput.innerHTML = "Error " + oReq.status + " occurred uploading your file.<br \/>"; 
      alert('failed'); 
     } 
     }; 
    oReq.send(oMyForm); 
} 

i kiedy wysłać to do upload-file.php:

logapp("post -> ".print_r($_POST,true));//logapp is just function to log to file 
logapp("files -> ".print_r($_FILES,true)); 

mam to z dziennika:

09/07/2013 02:47:06 pm :: post -> Array 
(
    [foto_path] => [object HTMLImageElement] 
    [nip] => 123223374 
) 

09/07/2013 02:47:06 pm :: files -> Array 
(

) 

Dostałem zawiadomienie sukces, ale trzeba uzyskać pliki foto_path jako $_FILES nie $_POST. Moje pytanie jest powodem, dla którego pliki wejściowe wykryto jako $_POST["foto_path"], a nie jako $_FILES["foto_path"]. Jak to zmienić na $_FILES["foto_path"], abym mógł rozpocząć pracę z przesłanymi plikami?

+0

Sprawdź to pytanie [File Upload z Ajax XmlHttpRequest] [1] [1]: http://stackoverflow.com/questions/6211145/upload-file-with-ajax-xmlhttprequest – maketest

+0

nadal mam '[object HTMLImageElement]' w '$ _POST' jak to zmienić w pliki? –

+0

Zauważ, że 'formData()' nie jest obsługiwane w IE <= 9. Wydaje się jednak, że nie ma to żadnego znaczenia w dzisiejszych czasach. –

Odpowiedz

5

Aktualizacja: I rozwiązać ten problem na ostatniej

var ft=$('#foto_path_upload')[0].files[0]; 
oMyForm.append("foto_path_upload", ft); 

i to mam to z dziennika:

09/07/2013 04:26:53 pm :: files -> Array 
(
    [foto_path_upload] => Array 
     (
      [name] => noimages.jpg 
      [type] => image/jpeg 
      [tmp_name] => D:\xampp\tmp\php4E90.tmp 
      [error] => 0 
      [size] => 3642 
     ) 

)  

Problem rozwiązany. thanx wszystkich

+0

dlaczego użyliśmy [0], aby uzyskać dostęp do elementu przesyłania plików - '$ (' # foto_path_upload ') [0]' – Arjit

+0

Niestety zapomniałem, dlaczego używam [0]. Może dlatego, że mam wiele elementów o id "foto_path_upload", więc to musi być spesific, do którego chcę mieć dostęp ... po prostu spróbuj bez niego. –

+0

@Arjit może być spóźnioną odpowiedzią, ale używa [0], aby to zrobić obiekt DOM z obiektu jquery możesz bezpośrednio zrobić var ​​file = document.getElementById ("foto_path_upload"). files [0];) – themightysapien