2016-01-24 173 views
0

我想这个好几天了!没有什么似乎为别人工作,为我工作!我现在必须完成它。通过ajax上传文件

所以这是很基本的:

<form method="POST" enctype="multipart/form-data"> 
    <input type="file" name="browseFile" id="photo" /> 
    <input type="submit" id="send" /> 
</form> 

正如你可以看到,有一个HTML表单与文件的输入和一个提交按钮。 对于我想要做的,我需要从输入字段立即发送文件后,将其值更改为服务器。

让我们跳过一部分事件监听器和验证。

这是JavaScript,这应该是能够获得输入字段的值,并将其发送到服务器:

var inputFilePhoto = document.getElementById("photo"); 
var imageFile = inputFilePhoto.files[0]; 

var formData = new FormData();    
formData.append("file", imageFile); 

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: formData, 
    contentType: false, 
    processData: false, 

    success: function (output) { 
     document.write(output); 
     alert("OK"); 
    }, 
    error: function() { 
     alert("Error"); 
    } 
}); 

正如你所看到的,我使用的是FORMDATA对象,这是几天前对我来说是新的。它适用于文本字段等,但不适用于文件输入字段。我还尝试将整个表单应用于此对象(new FormData($("form")[0])),但是这又一次忽略了类型为“file”的输入字段,就好像它们不存在一样。

回到上面的例子:ajax.php没有做什么比调试$ _POST。因此,这是ajax.php:

<?php 

echo '<pre>'; 

var_dump($_POST); 
echo '</pre>'; 

这样做的结果是一个空数组array(0) { }

技术细节:测试在Chrome V48在Mac OS X 10.11,使用jQuery 2.2.0

我希望有人能最终帮助我,我接受使用js插件的解决方案。

回答

2

来自文件输入的数据出现在the $_FILES superglobal中,而不是$_POST,当表单数据被PHP解析时。

+0

哦,我的上帝,非常感谢你!我为一个客户做了这件事,并承诺昨天会做。谢谢,我爱你! – Stringering