我该如何发布文件并输入字符串数据FormData()?例如,我还有许多其他 隐藏的输入数据 ,需要将它们发送到服务器,
FormData()
html,
<form action="image.php" method="post" enctype="multipart/form-data"> <input type="file" name="file[]" multiple="" /> <input type="hidden" name="page_id" value="<?php echo $page_id;?>"/> <input type="hidden" name="category_id" value="<?php echo $item_category->category_id;?>"/> <input type="hidden" name="method" value="upload"/> <input type="hidden" name="required[category_id]" value="Category ID"/> </form>
使用下面的这段代码,我仅设法发送文件数据 ,而不 发送隐藏的输入数据。
jQuery,
// HTML5 form data object. var fd = new FormData(); var file_data = object.get(0).files[i]; var other_data = $('form').serialize(); // page_id=&category_id=15&method=upload&required%5Bcategory_id%5D=Category+ID fd.append("file", file_data); $.ajax({ url: 'add.php', data: fd, contentType: false, processData: false, type: 'POST', success: function(data){ alert(data); } });
server.php
print_r($_FILES); print_r($_POST);
结果,
Array ( [file] => Array ( [name] => xxx.doc [type] => application/msword [tmp_name] => C:\wamp\tmp\php7C24.tmp [error] => 0 [size] => 11776 ) )
我希望得到这个结果,
Array ( [file] => Array ( [name] => xxx.doc [type] => application/msword [tmp_name] => C:\wamp\tmp\php7C24.tmp [error] => 0 [size] => 11776 ) ) Array ( [page_id] => 1000 [category_id] => 12 [method] => upload ... )
可能吗?
var fd = new FormData(); var file_data = $('input[type="file"]')[0].files; // for multiple files for(var i = 0;i<file_data.length;i++){ fd.append("file_"+i, file_data[i]); } var other_data = $('form').serializeArray(); $.each(other_data,function(key,input){ fd.append(input.name,input.value); }); $.ajax({ url: 'test.php', data: fd, contentType: false, processData: false, type: 'POST', success: function(data){ console.log(data); } });
添加了一个for循环,并在中将更改.serialize()为.serializeArray(),以供对象引用.each()附加到FormData。
for
.serialize()
.serializeArray()
.each()
FormData