Решение, которое я нашел, состоит в том, чтобы продолжать использовать iframe в качестве цели для формы. Затем, когда загрузка завершится, я провожу несколько проверок содержимого iframe.
Сначала с помощью jQuery я проверяю содержимое # upload-frame, чтобы увидеть, содержит ли оно страницу перенаправления или ту же страницу с ошибками, например:
$('#upload-frame').contents().find('.errors').size();
Если размер ошибки больше 0, тогда я знаю, что возникла проблема, и это нужно показать пользователю. Поэтому я делаю следующую замену кузова:
var html = $('#upload-frame').contents().find('body').html();
$('body').html(html);
Если ошибок нет, я просто перенаправляю на нужную страницу следующим образом:
window.location = "finished.php";