似乎您可能需要FormData
在 AJAX/pJAX 请求中使用可以处理文件的对象。您可以在Mozilla 开发者网络上阅读更多内容。
例如,如果这是您的表单:
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
首先获取文件内容,如下所示:
var formData = new FormData($('form')[0]);
然后您可以使用 jQuery$.ajax
请求或XMLHttpRequest();
类似这样的简单请求:
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://foo.com/processfile.php");
xhr.send(formData);
或者在 jQuery 中类似:
$.ajax({
url: 'http://foo.com/processfile.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false
});
在服务器端,processfile.php
您可以通过以下方式接收/显示文件内容:
$file = $_FILES['file']['name'];
这应该适用于 pJAX,因为它是异步的!只需确保在您的 pJAX 请求之前放置此请求,或者如果您使用的是 jQuery,您可以将其添加为成功回调的一部分。例如(不知道您使用的是哪个 pJAX 库):
$.ajax({
url: 'http://foo.com/processfile.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(data) {
$.pjax({url: url, container: '#pjax-container'});
}
});
编辑:如果您想支持 IE7+,则需要回退到使用隐藏的 iframe 元素进行上传,因为 FormData 仅在 Internet Explorer 10 中受支持。我已经测试过且无需 jQuery 即可提交文件的一个很棒的插件是http: //fineuploader.com/在我看来比https://github.com/malsup/form(jquery.form 插件)更好/更容易使用。