Javascript Ajax文件上传到php类

Javascript Ajax文件上传到php类,javascript,ajax,Javascript,Ajax,我正试图使用ajax将文件上传到一个面向对象类,但它没有正确上传 这里是ajax var handleUpload = function(event) { event.preventDefault(); event.stopPropagation(); var fileInput = document.getElementById('file'); var data = new FormData(); for(var i = 0; i < fileInput.files.le

我正试图使用ajax将文件上传到一个面向对象类,但它没有正确上传

这里是ajax

 var handleUpload = function(event)
 {


event.preventDefault();
event.stopPropagation();

var fileInput = document.getElementById('file');

var data = new FormData();

for(var i = 0; i < fileInput.files.length; i++)
{

    data.append('file[]', fileInput.files[i]);

}

var request = new XMLHttpRequest();

request.upload.addEventListener('progress', function(event)
{


});

request.upload.addEventListener('load', function(event)
{


});

request.upload.addEventListener('error', function(event)
{


});

request.open('POST', 'profile.php');
request.setRequestHeader('Cache-Control', 'no-cache');
request.send(data);

   }

   window.addEventListener('load', function(event)
   {

var submit = document.getElementById('submit');
submit.addEventListener('click', handleUpload);

   });

AJAX调用失败,因为无法异步提交文件*。这就是为什么
$\u文件
是空的。您可以(也应该)使用所谓的iframe表单post-hack(或者切换到jquery和


*这一点在本文中讨论。有关浏览器支持的信息,请参阅。

将表单发布到隐藏的iframe


正如@nietonfir所描述的,您不能仅仅使用XMLHTTPRequest发布一个input=file的表单。但是,当XHR2不可用(或者您不想使用它)时,一种常见的解决方法是将表单发布到页面上的隐藏iframe。有许多JavaScript库/jQuery插件等为这一点提供了抽象(只看一个例子),但概念相当简单。

我感觉这一点以前已经被问过一千次了。你查过我们第一次进去吗?没有一个接近我的question@user2872510,我怀疑这是可能的,我已经看过了,拜托,当然有可能,我已经说过了。但不能使用纯XMLHTTPRequest。如果您不相信我或不使用SO搜索,请自己用谷歌搜索它:,这里有一个例子,您是否设置了表单的enctype=“multipart/form data”?
if(!empty($_FILES['file']) && isset($_POST['special']))
{
    $special = $_POST['special'];
    $date = $_POST['date'];
    $user->postSpecial($special, $date, $_FILES);

}