Tuesday, May 21, 2024
 Popular · Latest · Hot · Upcoming
95
rated 0 times [  102] [ 7]  / answers: 1 / hits: 184625  / 11 Years ago, sat, january 11, 2014, 12:00:00

How can I post file and input string data with FormData()? For instance, I have many other hidden input data that I need them to be sent to the server,



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>


With this code below I only manage to send the file data but not the hidden input data.



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);


result,



Array
(
[file] => Array
(
[name] => xxx.doc
[type] => application/msword
[tmp_name] => C:wamptmpphp7C24.tmp
[error] => 0
[size] => 11776
)

)


I would like to get this as my result though,



Array
(
[file] => Array
(
[name] => xxx.doc
[type] => application/msword
[tmp_name] => C:wamptmpphp7C24.tmp
[error] => 0
[size] => 11776
)

)

Array
(
[page_id] => 1000
[category_id] => 12
[method] => upload
...
)


Is it possible?


More From » php

 Answers
9
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);
}
});


Added a for loop and changed .serialize() to .serializeArray() for object reference in a .each() to append to the FormData.


[#73247] Thursday, January 9, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
triston

Total Points: 545
Total Questions: 88
Total Answers: 94

Location: Lebanon
Member since Sun, Aug 2, 2020
4 Years ago
;