编辑: *更新代码以反映状态和当前问题*
我的HTML表单正确接受输入[type = file]。我知道我正在将适当的数据(file.name
)附加到formData
。我知道我的脚本archive_upload.php
正在被调用,但这是出错的地方。 $_POST
似乎没有接受任何事情。如果我在$len
之后打印$len = (int) $_POST['CONTENT_LENGTH'];
,则会显示0。
如何正确检索发送到我脚本的FormData?
这是我的JS:
var formData = new FormData();
var fileSelect = document.getElementById('file');
var uploadButton = document.getElementById('upload');
var form = document.getElementById('file_form');
/*$('#file').change(function() { });*/
form.onsubmit = function(event) {
event.preventDefault();
var files = fileSelect.files;
for (var i=0; i<files.length; i++) {
var file = files[i];
if(!file.type.match('image.*')) {
continue;
}
formData.append(i, file.name);
}
xhr = new XMLHttpRequest();
xhr.open('POST', 'archive_upload.php');
xhr.send(formData);
}
这是我的HTML:
<form id="file_form" action="archive_upload.php" method=POST enctype=multipart/form-data accept-charset=utf-8>
<input type="file" id="file" name="photos[]" />
<button type="submit" id="upload">Upload</button>
</form>
PHP:
<?php
$len = (int) $_POST['CONTENT_LENGTH'];
$files = array();
for ($i=0; $i < $len; $i++) {
$f = $_POST[$i]['name'];
$files.append($f);
}
$j = fopen('test.json', 'w');
fwrite($j, json_encode($files));
fclose($j);
?>
答案 0 :(得分:1)
据我所知,它根本没有调用ajax页面,因此请考虑在ajax调用中添加以下代码段作为选项:
processData: false,
contentType: false,
我相信this post在文件[s]和FormData
的类似问题上有经验答案 1 :(得分:1)
由于您使用Html表单和ajax来提交表单数据,最简单的方法是这样的:
<script>
$(document).ready(function(){
$("#upload").click(function(){
$.ajax({url: "<your url>",
data: {<put your data here>}
success: function(result){
}
cache: false,
contentType: false,
processData: false
});
});
});
</script>
HTML表单:
<form id="file_form" action="archive_upload.php" method=POST enctype=multipart/form-data accept-charset=utf-8>
<input type="file" id="file" name="photos[]" />
<button type="button" id="upload">Upload</button>
</form>