您可能需要在可以处理文件的 AJAX/pJAX 请求中使用 FormData 对象。您可以在Mozilla Developer Network 上阅读更多内容。
例如,如果这是您的表单:
<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 插件)更好/更容易使用。