4

I try send a file via jQuery to a PHP file for processing.

<form action="help-uploader.php" method="POST" class="signup" id="upform" enctype="multipart/form-data">

   <input type="text" id="title" name="title" tabindex="1" value="">
   <input id="file" type='file'" />
   <button class="submitbtn" id="submit">submit</button>
</form>

and jQuery:

$(document).ready(function(){
        $('#submit').click(function (e) {
        // custom handling here
            e.preventDefault();
            var ititle = $("#title").val();
            var ifile = $("#file").val();

            $.post("help-uploader.php",
                {
                    title: ititle,
                    file: ifile
                },function(data, status){alert("Data: " + data + "\nStatus: " + status);});
        });
    });

and **help-uploader.php**

<?php
echo $_POST['file'];
echo basename($_FILES["file"]["name"]);
?>

First ECHO prints path of file in client.

Second ECHO not prints anything.

How can I send a file to PHP via jQuery correctly?

2

2 Answers 2

3

You need to use formdata . I am providing a example function which takes arguments ,i.e form refrence and functions callback to do stuff.This function binds event on your form submit. Try below-

function sendAjaxForm(frm,callbackbefore,callbackdone)
    {
        var form = frm;
        form.submit(function(event){
            event.preventDefault();
            var formData = new FormData(this);
            var ajaxReq=$.ajax({
                url: $(this).attr('action'),
                type: $(this).attr('method'),
                data: formData,
                async: false,
                cache: false,
                contentType: false,
                processData: false,
                beforeSend: callbackbefore
                });
            ajaxReq.done(callbackdone);
        }); // submit done
    }

Now call that function as in your example

sendAjaxForm($('#upform'),function(){alert('sending');},function(data){alert("Data: " + data);})
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, specialy for nice function that works with every form in page.
1

You need to take advantage of FormData() with use of xmlhttprequest. $.post() should not be used while performing a file upload with ajax because it doesn't use xmlhttprequest instead you should use $.ajax() or native js xmlhttprequest.

As you are using jQuery then you can do this with form submit instead:

$(document).ready(function(){
    $('#upform').submit(function(e){
      e.preventDefault();
      var fd = new FormData(document.querySelector(this));
      $.ajax({
         url: "help-uploader.php",
         type: "POST",
         data: fd,
         cache:false, // do not cache 
         processData: false,  // required
         contentType: false   // required
         success:function(data){
           console.log(data);
         },
         error:function(err){
           console.log(err);
         }
     });
   });
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.