2013-10-28 3 views
0

Переменная $_FILES сценария upload.php остается равной нулю. Почему файл не отправлен? Все, кажется, все в порядке. Я хотел бы удалить форму и выполнить загрузку целиком через обработчик onchange. Это возможно?простая загрузка файлов XHR не передает файлы

<li>upload:<form id=upload enctype="multipart/form-data"> 
<input type=file id=file name=o onchange="submit()"/> 
</form></li> 

<script> 
document.getElementById('upload').submit=function(){ 
var ul=document.getElementById('file'); 
if(ul.files.length>0){ 
    file=ul.files[0]; 
    var x=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP'); 
    x.onreadystatechange=function(){if(x.readyState==4&&x.status==200){ 
    alert(x.responseText);} 
    } 
    x.open('post','upload.php',true); 
    x.setRequestHeader('Content-Type','multipart/form-data'); 
    x.setRequestHeader('X-File-Name',file.name); 
    x.setRequestHeader('X-File-Size',file.size); 
    x.setRequestHeader('X-File-Type',file.type); 
    x.send(file); 
} 
return false; 
} 

+0

Что это за функции 'upload' и' submit'? – Bergi

+0

Вы хотите использовать '.onsubmit'! – Bergi

+0

'onSubmit' и' submit' совпадают, я еще не смотрел браузер совместимости – aelgoa

ответ

1

Попробуйте FormData, он устанавливает заголовки на своих собственных.

var formData = new FormData(); 
formData.append("Filedata", document.getElementById("file").files[0]); 

var x=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP'); 
x.onreadystatechange=function(){if(x.readyState==4&&x.status==200){ 
    alert(x.responseText);} 
} 
x.open("POST", url); 
x.send(formData); 
Смежные вопросы