I think you are missing the responses. When you call first form, the browser start the connection, but just after that, you ask for the second form. Whitch cancel the first.
You need to call that forms with AJAX, to store each request with the correspondent response in some variable.
Your problem is like when you click too many links in a page before let it load the first link. Finally the loaded link is the last clicked.
TRY THIS SOLUTION:
You need to que keep some time between calls to handle response and start the download, so wright a function like this:
function submitFormAndWait(i) {
//this is your code to submit
$("input[name=id]:hidden").val(i);
$("form").submit()
//wait some time and call next form
if (i < 100) {
setTimeout(function(){ submitFormAndWait(i + 1); }, 3000);
}
}
POSSIBLE PROBLEM:
When you submit a form in the browser, this will load the response as the current page, and the script will start from zero other time.