【问题标题】:Submit form, then send form data to ajax from a new page提交表单,然后从新页面将表单数据发送到 ajax
【发布时间】:2012-01-08 06:41:53
【问题描述】:

我在 page1.php 上有一个表单,它重定向到 page2.php,我想在加载 page2.php 时立即将数据从表单传递到 page3.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'];
    ?>

一个。这对我来说似乎太多了,是否有任何 jquery 快捷方式?如何使用序列化来帮助我? 湾。这并不完全有效......我认为 $.post 有一些问题,也许我没有很好地触发它?我不确定。

我们将不胜感激。

【问题讨论】:

  • 你是想检索page3.php上的一些数据还是只是想发送数据??
  • 是的,我想检索page3.php 上的数据,这不就是POST 所做的吗?检索从 page2.php 发送的数据?
  • 嘿,由于某种原因它无法正常工作 :( 知道要检查什么吗?我看不到第 3 页上发生了什么,当我自己运行它时,它工作正常..跨度>

标签: php jquery ajax forms


【解决方案1】:

通过这种方式,您完全击败了 ajax 的第一个 A,异步。您应该做的是在第一页的表单的提交事件中添加 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 将继续运行。

【讨论】:

  • 不!这完全不是我需要的。我知道ajax是什么。 ajax 调用大约需要一个小时,我希望用户立即转到 page2.php 并让 page3.php 在后台运行。也在这里阅读我的问题:stackoverflow.com/questions/8768470/…
  • @LucyWeatherford 对不起。当我第一次阅读您的问题时,这并不是很清楚。请允许我更新我的帖子以包含相关信息。
  • 好的,谢谢!!这看起来很有希望:-) 但是我如何做然后重定向到page2.php?毕竟,用户提交了表单,现在我想在提交表单时将用户重定向到其他地方。
  • 哦,我知道了!我将在表单提交中的 .post 之后添加 href.location!
  • btw - 为什么false 在代码中有两次?一个是不重定向到真实的表单位置,另一个是什么?
猜你喜欢
  • 2013-02-09
  • 2011-12-10
  • 1970-01-01
  • 2011-04-01
  • 2013-09-21
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多