Reputation: 519
i have a form that contains 3 File inputs.i want to send it via jquery.i tried serialize function in jquery,but i realized that this function don't send file inputs!
here is my form :
<form id="submit_pics" action="#" >
file 1 : <input name="file1" id="file1" type="file" /><br />
file 2 : <input name="file2" id="file2" type="file" /><br />
file 3 : <input name="file3" id="file3" type="file" /><br />
<br />
<div>
<a id="submit" href="javascript:;" ><img src="uploads/images/button1.png" /></a>
</div>
</form>
and this is my javascript code :
<script type="text/javascript">
$(document).ready(function(){
$("#level3").click(function(event) {
var str = $("#submit_pics").serialize();
$.ajax({
type: "POST",
url: "track.php",
data: str,
success: function(theResponse) {
$('#req_result').html(theResponse);
}
return false;
});
});
Upvotes: 6
Views: 34285
Reputation: 1785
This code works for me
_private.saveFile=function(){
var formElement = $("#formId")[0];
var _params = new FormData(formElement),
_url = $(formElement).attr("action");
_private.postFile(_url,_params,function(data,error){
console.log(data);
console.log(error);
});
}
_private.postFile=function(_urlService,_parameters,callback){
var _url= _public.getPath()+_urlService;
_private.httpPostFile(_url,callback,_parameters);
};
_private.httpPostFile=function(_url,callback,_data){
$.ajax({
url: _url,
type: 'POST',
data: _data,
mimeType: "multipart/form-data",
contentType: false,
cache: false,
processData: false,
success: function (data, textStatus, jqXHR) {
callback(data,null);
},
error: function(xhr, status, error) {
console.log('error ',error);
console.log('status ',status);
console.log('xhr ',xhr);
callback(null,error);
}
});
}
Upvotes: -1
Reputation: 239
After some research I found that you can do it with:
$.ajax({
url: 'track.php',
type: 'POST',
data: new FormData($("#submit_pics")[0]),
processData: false,
contentType: false
}).
I'm Java programmer (Liferay) and in the server I use this to get the File:
UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
File File1 = uploadRequest.getFile("file1");
File File2 = uploadRequest.getFile("file2");
I supose something similar exists in php.
Upvotes: 10
Reputation: 590
Unfortunately you can not upload files through XMLHttpRequest. AJAX doesn’t actually post forms to the server, it sends selected data to in the form of a POST or GET request. Javascript is not capable of grabbing the file from the users machine and sending it to the server
You can use a tricky workaround, posting (without AJAX) the request to an hidden iframe.
Have a look at this TUTORIAL
Upvotes: 6
Reputation: 65254
You can't do it via $.ajax()
but you can use this uploadify plugin.
Upvotes: -1
Reputation: 26217
You should take a look at the JQuery Form Plugin. With that you can easily programmatically submit any form you have.
Upvotes: 0