I think that it is normal that the event d3.event.loaded returns the total size. Did you try the following to get the progress from the variable p in the function on "progress"?

Then to get the actual progress, you can use the following question: How to get progress from XMLHttpRequest

The final result should look like something like this:

        //do stuff with data
    }).on("progress", function(event){
        //update progress bar
        if (d3.event.lengthComputable) {
          var percentComplete = Math.round(d3.event.loaded * 100 /;

Related Query

More Query from same tag