How to Upload a File Using Jquery.Ajax and Formdata

How to use FormData for AJAX file upload?

For correct form data usage you need to do 2 steps.

Preparations

You can give your whole form to FormData() for processing

var form = $('form')[0]; // You need to use standard javascript object here
var formData = new FormData(form);

or specify exact data for FormData()

var formData = new FormData();
formData.append('section', 'general');
formData.append('action', 'previewImg');
// Attach file
formData.append('image', $('input[type=file]')[0].files[0]);

Sending form

Ajax request with jquery will looks like this:

$.ajax({
url: 'Your url here',
data: formData,
type: 'POST',
contentType: false, // NEEDED, DON'T OMIT THIS (requires jQuery 1.6+)
processData: false, // NEEDED, DON'T OMIT THIS
// ... Other options like success and etc
});

After this it will send ajax request like you submit regular form with enctype="multipart/form-data"

Update: This request cannot work without type:"POST" in options since all files must be sent via POST request.

Note: contentType: false only available from jQuery 1.6 onwards

Uploading both data and files in one form using Ajax?

The problem I had was using the wrong jQuery identifier.

You can upload data and files with one form using ajax.

PHP + HTML

<?php

print_r($_POST);
print_r($_FILES);
?>

<form id="data" method="post" enctype="multipart/form-data">
<input type="text" name="first" value="Bob" />
<input type="text" name="middle" value="James" />
<input type="text" name="last" value="Smith" />
<input name="image" type="file" />
<button>Submit</button>
</form>

jQuery + Ajax

$("form#data").submit(function(e) {
e.preventDefault();
var formData = new FormData(this);

$.ajax({
url: window.location.pathname,
type: 'POST',
data: formData,
success: function (data) {
alert(data)
},
cache: false,
contentType: false,
processData: false
});
});

Short Version

$("form#data").submit(function(e) {
e.preventDefault();
var formData = new FormData(this);

$.post($(this).attr("action"), formData, function(data) {
alert(data);
});
});

Sending formdata for file upload using ajax

use

$("#uploadForm").submit(function () {
var formData = new FormData(this);
$.ajax({
url: '/tab10/uploadImage',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function () {
alert('Form Submitted!');
},
error: function(){
alert("error in ajax form submission");
}
});
return false;
});

Upload file using FormData and jQuery.ajax

Read Using FormData Objects

FormData takes the dom reference as the argument, not jQuery wrapper.

So try

aFormData = new FormData($("form").get(0));

also

aFormData.append($(this).attr("name"), $(this).val());

to get the value of an input you need to use .val() not .attr('value')

Also to append the file you need to add the file reference like

aFormData.append("filename", $('#filename').get(0).files[0]);

So your code might have to look like

function SubmitForm() {
var aFormData = new FormData();

aFormData.append("filename", $('#filename').get(0).files[0]);

$("form input").each(function(i) {
aFormData.append($(this).attr("name"), $(this).val());
});

$("form select").each(function(i) {
aFormData.append($(this).attr("name"), $(this).val());
});

......
}

File Upload with jquery AJAX and FormData

The FormData constructor takes a HTMLFormElement, i.e. a form not a file, to add an individual file you have to use the append method

var formData = new FormData();
formData.append('file',content[1].files[0]);

also you spelt contenType incorrectly it should be contentType, notice the 2 Ts together

Sending file together with form data via ajax post

Can you try using FormData():

$("form#files").submit(function(){

var formData = new FormData($(this)[0]);

$.ajax({
url: window.location.pathname,
type: 'POST',
data: formData,
async: false,
success: function (data) {
alert(data)
},
cache: false,
contentType: false,
processData: false
});

return false;
});

The above is a sample code, but you may use it to modify it.

How to upload a file using jQuery.ajax and FormData

You have to add processData:false,contentType:false to your method, so that jQuery does not alter the headers or data (which breaks your current code).

function uploadFile(blobFile, fileName) {
var fd = new FormData();
fd.append("fileToUpload", blobFile);

$.ajax({
url: "upload.php",
type: "POST",
data: fd,
processData: false,
contentType: false,
success: function(response) {
// .. do something
},
error: function(jqXHR, textStatus, errorMessage) {
console.log(errorMessage); // Optional
}
});
}

Upload a file with Ajax, jQuery and Laravel

Try this:

var formData = new FormData();
var file = $('#file').prop('files')[0];

formData.append('file', file);
formData.append('other_variable', $('#other_variable').val());
// Don't use serialize here, as it is used when we want to send the data of entire form in a query string way and that will not work for file upload

$.ajax({
url: '{{ url("your_url") }}',
method: 'post',
data: formData,
contentType : false,
processData : false,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(response){
// Do what ever you want to do on sucsess
}
});

In controller method, you will get the file like:

$file = Input::file('file');

jQuery / AJAX - send additional data together with file upload

To send additional parameters, you can just append it to formdata like below:

var formdata=new FormData();
formdata.append('simpleFile', $('#file').get('files')[0]); //use get('files')[0]
formdata.append('someotherparams',someothervalues);//you can append it to formdata with a proper parameter name

$.ajax({
url : 'http://www.example.com',
dataType : 'json',
cache : false,
contentType : false,
processData : false,
data : formData, //formdata will contain all the other details with a name given to parameters
type : 'post',
success : function(response) {something}
});


Related Topics



Leave a reply



Submit