我有一张可以通过form.submit()
提交的表单,而且回复是正确的。现在我想使用ajax提交它,但是在提交文件时我遇到了问题。
表单非常简单:
<form name="Upload" enctype="multipart/form-data" method="post" action="upload.asp">
<input type="file" name="file" id="fileinput"/>
<input type="button" name="FileUpload" class="button" id="append_new"
onclick="xmlhttpPost('upload.asp', document.getElementById('fileinput').files[0]);" value="submit file"/>
</form>
我收到了以下ajax电话:
function xmlhttpPost(strURL, form) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'multipart/form-data');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText);
}
}
self.xmlHttpReq.send('file=' + file);
}
function updatepage(str){
document.getElementById("fileitems").innerHTML = str;
}
现在的问题是:服务器获取字符串[object file]
而不是实际的文件内容。如何确保提交文件数据?
答案 0 :(得分:2)
您可以使用formData:
function xmlhttpPost(strURL, form) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'multipart/form-data');
self.xmlHttpReq.onreadystatechange = function () {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText);
}
}
if ( !! window.FormData) {
var formData = new FormData();
formData.append('file', form);
self.xmlHttpReq.send(formData);
}
}
function updatepage(str) {
document.getElementById("fileitems").innerHTML = str;
}
Here's一个体面的完整ajax文件上传器的示例。
答案 1 :(得分:0)
你错过了这个:
self.xmlHttpReq.setRequestHeader("X_FILENAME", file.name);
这将区分正常POST和应用层的文件上传。
如果您使用的是PHP,它将类似于:
$file = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : '');