Niklesh Raut
Niklesh Raut

Reputation: 34914

How to upload file in laravel with formData in jquery ajax

I am using laravel 5.4 and jquery Ajax to upload file and some form data.

I am using below code

function submitDocument(){
    var formData = new FormData(); // Currently empty
    var _token = $("#_token").val().trim();
    formData.append('title', $("#title").val());
    formData.append("doc",$("#doc")[0].files[0]);
    $.ajax({
      url: "documents",
      method: "post",
      data:{_token,formData},
    }).done(function(data) {

    });
    return false;// Not to submit page
}

And I am getting error

Uncaught TypeError: Illegal invocation

enter image description here

How can I fix this ? Thanks in advance for your time.

I am able to get value in formData by using

console.log(formData.get('title'));
console.log(formData.get('doc'));

enter image description here

Upvotes: 1

Views: 7116

Answers (3)

wolacinio
wolacinio

Reputation: 138

<script>
$(document).ready(function() {
    var url = "{{ url('/admin/file') }}"; 
    var options = { 
            type: 'post',
            url: url,       
            headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
            dataType: 'doc',
            cache: false,
            contentType: false,
            processData: false,
            success: function (data) {
                alert('Ok');
            },
            error: function (data) {
                alert('Error');
            }
    }; 
    $('#save').on('click', function() { 
        $("#form").ajaxSubmit(options); 
        return false; 
    }); 
}); 
</script>

Upvotes: 1

Deep Swaroop Sachan
Deep Swaroop Sachan

Reputation: 148

Try this way

$(document).ready(function (){
$("#form").on('submit',(function(e){
        e.preventDefault();
        var formdata = new FormData(this);
        var _token = $("#_token").val().trim();
        formData.append('title', $("#title").val());
        formData.append("doc",$("#doc")[0].files[0]);
        $.ajax({
            url: "/site/url",
            type: "POST",
            data:{token:_token,formData},
            contentType: false,
            cache: false,
            processData:false,
            success: function(data){

            },
        });
    }));});

Upvotes: 0

VinoCoder
VinoCoder

Reputation: 1153

Try adding processData: false, contentType: false in your code

Replace your script with this:

function submitDocument(){
var formData = new FormData(); // Currently empty
var _token = $("#_token").val().trim();
formData.append('title', $("#title").val());
formData.append("doc",$("#doc")[0].files[0]);
$.ajax({
  url: "documents",
  method: "post",
  data:{_token,formData},
  cache : false,
  processData: false,
  contentType: false
}).done(function(data) {

});
return false;// Not to submit page
}

By default, data passed in to the data option as an object will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.

Upvotes: 3

Related Questions