1

I am trying to get the extension and name of a file using Ajax.

My ajax code looks like:

$.ajax({
    type: "POST",
    url: url,
    data: $("#updateMember").serialize(), 
    mimeType: "multipart/form-data",
    contentType: false,
    cache: false,
    processData: false,
    success: function (data) {
        alert(data);
    }
});

In PHP I have this

$imageFileType = pathinfo($_FILES["input9"]["name"], PATHINFO_EXTENSION);
echo $imageFileType;

and my html is

<form method="post" enctype="multipart/form-data" id="updateMember">
    <input id="input-9" name="input9" type="file" class="file file-loading" data-allowed-file-extensions='["png", "jpg", "gif", "jpeg"]' style="top: 0px;">
    <li class="menu__item"><input name="offerUpload" id="dashOffersBtn" class="menu__link menu_input btnDashboard" style="margin: 0 auto; height:20px;padding: 0;padding-bottom: 22px;width: 70%;" type="button" value="SAVE"></li>
</form>

but it seems to not work. What am I doing wrong?

Sam Hanley
  • 4,707
  • 7
  • 35
  • 63
SNos
  • 3,430
  • 5
  • 42
  • 92

1 Answers1

1

You have to use FormData() to make this possible, serialize or serializeArray() does not support file api's use the below solution :

Main update for working solution

I did update the Save button's type from button to submit please use the below html :

<form method="post" enctype="multipart/form-data" id="updateMember">
    <input id="input-9" name="input9" type="file" class="file file-loading" data-allowed-file-extensions='["png", "jpg", "gif", "jpeg"]' style="top: 0px;">
    <li class="menu__item">
    <input name="offerUpload" id="dashOffersBtn" class="menu__link menu_input btnDashboard" style="margin: 0 auto; height:20px;padding: 0;padding-bottom: 22px;width: 70%;" type="submit" value="SAVE">
    </li>
</form>

and use the below jquery code to make it work

jQuery('#updateMember').submit(function(e){
           e.preventDefault();
            var data = new FormData(this);
                $.ajax({
                    type: "POST",
                    url: 'upload.php',
                    data: data, 
                    mimeType: "multipart/form-data",
                    contentType: false,
                    cache: false,
                    dataType: "html",
                    processData: false,
                    success: function(data) {
                        alert(data);
                    }
                });
        });

also use the below php code for extension :

$data = $_FILES['input9'];
$data_ext = explode('/',$data['type']);
$extension = $data_ext[1];
echo $extension;

My test index.php code

http://pastebin.com/L81xUbxL

Change Url To your target url.

Old non working

 var data = new FormData('#updateMember');
    $.ajax({
        type: "POST",
        url: url,
        data: data, 
        mimeType: "multipart/form-data",
        contentType: false,
        cache: false,
        dataType: "html",
        processData: false,
        success: function(data) {
            alert(data);
        }
    });

for getting an extension you can do this

$path_ = pathinfo($_FILES["input9"]["name"]);
$extension = $path_['extension'];
echo $extension;
Arsh Singh
  • 1,580
  • 1
  • 11
  • 31