Таким образом вы полностью победите первую Ajax, асинхронную . Что вам нужно сделать, это добавить вызов ajax в событие отправки формы на первой странице.
<form action="action.php" method="GET" id="form">
<input name="var1" />
<input name="var2" />
<input name="var3" />
<input name="var4" />
<input type="submit" />
</form>
<script>
$('#form').submit(function() {
$.post('action.php', {
var1: $('input[name="var1"]').val(),
var2: $('input[name="var2"]').val(),
var3: $('input[name="var3"]').val(),
var4: $('input[name="var4"]').val()
});
return false; //Prevent form from actually submitting
});
</script>
Таким образом, если у пользователя есть javascript, форма передается асинхронно (не требуя загрузки новой страницы) с помощью jQuery. Но если у пользователя нет javascript, форма отправляется нормально.
Чтобы убедиться, что ваш page3.php (то, что я назвал action.php) продолжает выполняться даже после того, как пользователь ушел, вы должны изучить ignore_user_abort()
и set_time_limit()
.
//At the top of page3.php
ignore_user_abort(true); //Allow user to navigate away
set_time_limit(0); //Allow script to run indefinitely
И, как я предложил выше, вы все равно должны отправить форму с AJAX, как я сделал. Две функции PHP, которые я упомянул выше, устранят необходимость в промежуточном скрипте page2.php. Вот так:
page1.php
<form action="" method="get" id="form">
<input name="var1" />
<input name="var2" />
<input name="var3" />
<input name="var4" />
<input type="submit" />
</form>
<script>
$('#form').submit(function() {
$.post('page3.php', {
var1: $('input[name="var1"]').val(),
var2: $('input[name="var2"]').val(),
var3: $('input[name="var3"]').val(),
var4: $('input[name="var4"]').val()
});
return false; //Prevent form from actually submitting
});
</script>
Теперь пользователь может заполнить page1.php и нажать кнопку «Отправить». jQuery будет перехватывать отправку формы и отправлять данные через AJAX на page3.php.
page3.php
ignore_user_abort(true); //Allow user to navigate away
set_time_limit(0); //Allow script to run indefinitely
//Rest of processing code...
page3.php получит запрос AJAX и начнет выполнять свою работу. Когда пользователь отходит от page1.php, AJAX-запрос будет отменен (и соединение с запросом для page3.php будет потеряно), но page3.php продолжит работу.