(function () {

    // support for uploadProgress callback
    var originalXHR = $.ajaxSettings.xhr;

    $.ajaxSetup({
        xhr: function () {
            var myXHR = originalXHR();

            if (myXHR.hasOwnProperty('upload') && this.hasOwnProperty('uploadProgress')) {
                myXHR.upload.addEventListener('progress', this.uploadProgress, false);
            }

            return myXHR;
        }
    });


    // Example request
    function onUploadProgress(e) {
        console.log((e.loaded / e.total) * 100 | 0);
    }

    function onSuccess() {
        console.log('request over');
    }

    var file = $('input[type="file"]')[0].files[0],
        myFormData = new FormData();

    myFormData.append(file.name, file);

    $.ajax({
        url:      'http://yoururl',

        timeout:     120000,
        method:      'post',
        processData: false,
        cache:       false,
        contentType: false,

        data: myFormData,

        uploadProgress: onUploadProgress,
        success:        onSuccess
    });

})();