Ratan Shastri
asked on
how to increment a progress bar while inserting data into database on button click in php
I have tried doing this but couldn't get it. Below is my code :
Code for Progress bar is as follows:
insertdata.php In this file, insertion of data is processed.
Here working of my code is something like this: when the user presses the "Submit" button, progress bar shows 30% increase and when the process finishes 30% moves to 100%.
What I want to achieve is : Progress Bar should show progress ( percent by percent ) with the insertion of data into database, after Submit button is pressed.
How to achieve this?
Please help
<script>
$(document).ready(function(){
var $progressbar = $("#progressbar");
$progressbar.show();
$('#uploadForm').on('submit', function(e){
e.preventDefault();
$(function(){
$progressbar.css('width', '30%');
});
$.ajax({
url: "insertdata.php",
type: "POST",
data: new FormData(this),
contentType: false,
processData: false,
success: function(data){
console.log(data);
if (data == 'T'){
$('#txtname').val("");
$('#txtsex').val("");
$('#txtage').val("");
$('#txterr').val('Record Inserted');
$progressbar.css('width', '100%');
}
},
error: function(data){
alert("Something went wrong !");
}
});
});
});
</script>
Code for Progress bar is as follows:
<div class="progress" style="margin-top:100px">
<div class="progress-bar active" id="progressbar" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
<span class="sr-only">0% Complete</span>
</div>
</div>
insertdata.php In this file, insertion of data is processed.
Here working of my code is something like this: when the user presses the "Submit" button, progress bar shows 30% increase and when the process finishes 30% moves to 100%.
What I want to achieve is : Progress Bar should show progress ( percent by percent ) with the insertion of data into database, after Submit button is pressed.
How to achieve this?
Please help
Without jQuery plugin :
With this jQuery plugin : https://github.com/likerRr/jq-ajax-progress
<script>
$(document).ready(function(){
var $progressbar = $("#progressbar");
$progressbar.show();
var updateProgressBar = function(evt) {
if(evt.lengthComputable) {
var percent = (evt.loaded*100)/evt.total;
$(function(){
$progressbar.css('width', percent.toFixed(1) + '%');
});
}
}
$('#uploadForm').on('submit', function(e){
e.preventDefault();
$.ajax({
xhr: function() {
var req = new XMLHttpRequest();
req.upload.addEventListener("progress", updateProgressBar, false);
req.addEventListener("progress", updateProgressBar, false);
return req;
},
url: "insertdata.php",
type: "POST",
data: new FormData(this),
contentType: false,
processData: false,
success: function(data){
console.log(data);
if (data == 'T'){
$('#txtname').val("");
$('#txtsex').val("");
$('#txtage').val("");
$('#txterr').val('Record Inserted');
$progressbar.css('width', '100%');
}
},
error: function(data){
alert("Something went wrong !");
});
});
});
});
</script>
With this jQuery plugin : https://github.com/likerRr/jq-ajax-progress
<script>
$(document).ready(function(){
var $progressbar = $("#progressbar");
$progressbar.show();
var updateProgressBar = function(evt) {
if(evt.lengthComputable) {
var percent = (evt.loaded*100)/evt.total;
$(function(){
$progressbar.css('width', percent.toFixed(1) + '%');
});
}
}
$('#uploadForm').on('submit', function(e){
e.preventDefault();
$.ajax({
url: "insertdata.php",
type: "POST",
data: new FormData(this),
contentType: false,
processData: false,
success: function(data){
console.log(data);
if (data == 'T'){
$('#txtname').val("");
$('#txtsex').val("");
$('#txtage').val("");
$('#txterr').val('Record Inserted');
$progressbar.css('width', '100%');
}
},
error: function(data){
alert("Something went wrong !");
});
});
}).uploadProgress(updateProgressBar).upload(updateProgressBar);
});
</script>
/*
* jQuery Ajax Progress - Lightweight jQuery plugin that adds support of `progress` and `uploadProgress` promises to $.ajax()
* Copyright (c) 2015 Alexey Lizurchik <al.lizurchik@gmail.com> (http://likerrr.ru)
* Licensed under the MIT license
* http://likerrr.mit-license.org/
*/
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
var $originalAjax = $.ajax.bind($);
$.ajax = function (url, options) {
if (typeof url === 'object') {
options = url;
url = undefined;
}
options = options || {};
// Instantiate our own.
var xmlHttpReq;
if (!options.xhr) {
xmlHttpReq = $.ajaxSettings.xhr();
} else {
xmlHttpReq = options.xhr();
}
// Make it use our own.
options.xhr = function () {
return xmlHttpReq;
};
var chunking = options.chunking || $.ajaxSettings.chunking;
// this line looks strange, but without it chrome doesn't catch `progress` event on uploading. Seems like engine bug
xmlHttpReq.upload.onprogress = null;
var $newPromise = $originalAjax(url, options);
// Extend our own.
$newPromise.progress = function (handler) {
// Download progress
var lastChunkLen = 0;
xmlHttpReq.addEventListener('progress', function (e) {
var params = [e],
chunk = '';
if (this.readyState == 3 && chunking) {
chunk = this.responseText.substr(lastChunkLen);
lastChunkLen = this.responseText.length;
params.push(chunk);
}
handler.apply(this, params);
}, false);
return this;
};
$newPromise.uploadProgress = function(handler) {
// Upload progress
if (xmlHttpReq.upload) {
xmlHttpReq.upload.addEventListener('progress', function (e) {
handler.apply(this, [e]);
}, false);
}
return this;
};
return $newPromise;
};
}));
ASKER
Thanks it really helped me a lot, can u please provide me a link from where can I study more about this.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Here is the demonstration link for the article about progress bars:
https://iconoun.com/demo/jquery_progress_bar.php
See also:
My Favorite Lazy Alternative in the article. This may be enough for essentially instantaneous activities like a database INSERT query.
https://v.cdn.vine.co/w/ccf87cd9-assets/images/loading_black.gif
https://iconoun.com/demo/jquery_progress_bar.php
See also:
My Favorite Lazy Alternative in the article. This may be enough for essentially instantaneous activities like a database INSERT query.
https://v.cdn.vine.co/w/ccf87cd9-assets/images/loading_black.gif
https://www.experts-exchange.com/articles/14519/A-jQuery-Progress-Bar.html
In order for the progress bar to be meaningful (or maybe even visible at all) the server-side process would need to run long enough for client/server communication to take place. Typically a database insert is completed in milliseconds, so you might not see anything if the process completes quickly. The article deliberately delays the background process so that the progress bar can be visible.