2013-07-09 31 views
6

Tôi biết đã có câu hỏi cho vấn đề này nhưng tôi vẫn không thể làm điều đó đúng cách. Cần giúp đỡ.Đưa tệp đầu vào vào FormData jquery để gửi tới PHP

Tôi cần tải lên tệp có dữ liệu bổ sung với tệp đó.

input.php my:

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

tôi send rằng với 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); 
} 

và khi tôi send đó để upload-file.php:

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

Tôi nhận này từ nhật ký:

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

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

) 

tôi đã cảnh báo thành công nhưng tôi cần chuyển file cho foto_path như $_FILES không $_POST. Câu hỏi của tôi là lý do tại sao tệp đầu vào được phát hiện là $_POST["foto_path"] không phải là $_FILES["foto_path"]. Cách thay đổi điều đó thành $_FILES["foto_path"] để tôi có thể bắt đầu làm việc với các tệp được tải lên?

+0

Kiểm tra câu hỏi này [Upload File Với Ajax XMLHttpRequest] [1] [1]: http://stackoverflow.com/questions/6211145/upload-file-with-ajax-xmlhttprequest – maketest

+0

tôi vẫn có '[đối tượng HTMLImageElement]' trong '$ _POST' làm thế nào để thay đổi nó thành các tập tin? –

+0

Lưu ý rằng 'formData()' không được hỗ trợ trong IE <= 9. Tuy nhiên, có vẻ như không có vấn đề gì ngày nay. –

Trả lời

5

cập nhật: i giải quyết vấn đề này cuối cùng

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

và điều này tôi đã nhận này từ nhật ký:

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 
     ) 

)  

Vấn đề giải quyết. thanx mọi người

+0

lý do chúng tôi đã sử dụng [0] để truy cập phần tử tải lên tệp - '$ (' # foto_path_upload ') [0]' – Arjit

+0

Xin lỗi tôi đã quên lý do tôi sử dụng [0]. Có lẽ vì tôi có nhiều phần tử với id "foto_path_upload" nên nó cần phải được spesific mà tôi muốn truy cập ... chỉ cần thử mà không có nó .. –

+0

@Arjit có thể là một trả lời muộn nhưng anh ta đang sử dụng [0] để làm cho nó một đối tượng dom từ đối tượng jquery bạn có thể trực tiếp làm var file = document.getElementById ("foto_path_upload"). files [0];) – themightysapien