我很困惑,为什么使用ajax提交表单时会得到Undefined index: file_upload_name
?
我刚刚进行了测试,这是php服务器。
<?php
echo count($_FILES['file_upload_name']['name']);
?>
这是表单,我希望有一个定位按钮来提交表单,而不是常规按钮。
<form method="post" id="the-form" action="upload.php" enctype="multipart/form-data">
<input type="file" name="file_upload_name[]" multiple>
<a href="#" id="btn-submit">Submit</a>
</form>
这是jquery,我使用ajax在锚点单击时手动提交表单。
$( document ).ready( function () {
$( '#btn-submit' ).on( 'click', function ( e ) {
e.preventDefault();
$.ajax( {
url: 'upload.php',
dataType: 'text',
cache: false,
contentType: false,
processData: false,
data: $( '#the-form' ).serialize(),
type: 'post',
error: function ( jqXHR, textStatus, errorThrown ) {
console.log( "OOPS!: " + errorThrown );
},
success: function ( data ) {
console.log( 'Submit success, server says: ' + data );
}
} );
} );
});
这是服务器抛出的错误
成功上传文件:
通知:未定义索引: 2
上 D:\ xampp \ htdocs \ sampleupload \ upload.php 中的file_upload_name
警告:count():参数必须是在第 2行的 D:\ xampp \ htdocs \ sampleupload \ upload.php 中实现Countable的数组或对象
0
这只会在使用ajax时发生,而在我有一个常规按钮提交表单时不会发生。我错过了一些东西,但我不知道是什么东西。我现在很困惑。
更新
只是为了清楚起见,我不是在问如何做或现在如何做。我对为什么服务器返回undefined index of variable
感到困惑,我想理解它。显然,如果我使用FormData()
不会发生这种情况,但是由于我使用serialize()
,所以我希望服务器不会说undefined index of variable
。