Отправьте форму, затем отправьте данные формы в ajax с новой страницы - PullRequest
0 голосов
/ 08 января 2012

У меня есть форма на page1.php, которая перенаправляет на page2.php, я хочу передать данные из формы в page3.php сразу после загрузки page2.php.(пользователю не нужно видеть, что происходит на странице 3, только на странице 2)

Что я должен использовать для передачи переменных?В настоящее время я использую

page1.php

    <html>
            <form action=page2.php method=post>
                    <!-- form content here incl name attr for input elements -->
            </form>
    </html>

page2.php

    <body>
    <?php
            $var1 = $_POST['name1']; // int   
            $var2 = $_POST['name2']; // int   
            $var3 = $_POST['name3']; // int 
            $var4 = $_POST['name4']; // str
    ?>
    <!-- some code here -->
    <script>
            var var1 = <?php echo $var1; ?>;        
            var var2 = <?php echo $var2; ?>;        
            var var3 = <?php echo $var3; ?>;        
            var var4 = "<?php echo $var4; ?>";        
            $.post('page3.php',{var1: var1, var2: var2, var3: var3, var4: var4});         
    </script>
    </body>

page3.php

    <?php        
            $var1 = $_POST['var1'];
            $var2 = $_POST['var2'];
            $var3 = $_POST['var3'];
            $var4 = $_POST['var4'];
    ?>

a.Мне кажется, это слишком много, есть ли ярлыки jquery?Как я могу использовать сериализацию, чтобы помочь мне?б.это не работает полностью ... Я думаю, что есть некоторая проблема с $ .post, может быть, я не запускаю это хорошо?Я не уверен.

Помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 января 2012

Таким образом вы полностью победите первую 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 продолжит работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...