Я бы сделал что-то вроде этого, так как вы на самом деле не предоставляете PDF (который может потребовать закладок, графики, навигационных ссылок и другого сложного контента), но вам просто нужно загрузить много контента и убедиться, что запрос не такая большая, что время ожидания страницы истекает.
Проблемы:
- Большой размер файла и время ожидания
- Должен обслуживать весь договор
Шаг первый
Сделать каждую страницу отдельным текстовым компонентом. Вы можете сделать это, создавая отдельные файлы для каждой страницы, или с помощью одного PHP-сценария раздавать отдельные страницы контента. Google завален PHP, который переводит PDF в текст.
Для наших целей у вас есть один файл PHP, который раздает контент, в этом методе:
./agreement.php?page=1
Шаг второй
Запросить содержимое в div, используйте рекурсию, чтобы заставить его загружать следующую страницу после успешной загрузки первой (не раньше или не позже. Асинхронный может быть таким грязным).
//Untested code
function loadPages(n) {
$.ajax({
url: './agreement.php',
data: {'page':n},
error : function (){ loadPages(n) }, //Try to load again
success: function (pageData) {
n++;
$('#agreementBox').append(pageData);//Puts data into document
if (n > 100) {return 0;} //Exit recursion on 100th page being appended
loadPages(n); //Recursive call, loads next page after this one has been loaded
}
});
}
loadPages(1); //Call function for the first time.
Беспокойство
- Придерживайтесь простого текста, 100 страниц графических данных в одном и том же рендеринге могут потребовать много памяти.
- Ваш запрос ajax может завершиться неудачей по ряду причин, повторная попытка ошибки, которую я вставил, не покроет все из них, и может продолжаться вечно, например, в случае сбоя сценария php.
- Пользователи могут договориться о загрузке до завершения соглашения.
- Style. Я использую «магические числа» в моем примере, где 100 страниц - это жестко запрограммированное значение, а не константа, не делайте этого, когда собираетесь реализовать это.