如何在用户输入后进行多个AJAX查询?

时间:2015-07-02 21:10:23

标签: php jquery ajax firefox ubuntu-14.04

这看起来很简单,但我无法为我的生活找到足够的指导。无论用户输入是like this还是this,我都只能找到有关连续AJAX查询的内容。

我要做的是创建一项调查,以便在用户回答问题后,网站会将问题替换为下一个问题,依此类推。

这是我到目前为止(在.php文件中):

<head>中,我为每个连续的元素调用了一个函数:

<script type="text/javascript">
    function nextPage(url) {
        $("#consent-form").empty();
        $("#consent-form").load(url);
    }
</script>

也许这不是它的完成方式。我不知道。就像我说的那样,我还没有找到足够的帮助。据我所知,empty()不应该删除#resentation-form,而只删除它的内容和子节点,这正是我想要的行为。

这是我想在每个回答问题后换出的div的初始html和php:

<div id="consent-form">

   <?php

        // Check for a valid email address.
        $email = $emailErr = "";

        if ($_SERVER["REQUEST_METHOD"] == "POST") {
            if (empty($_POST["email"])) {
                $emailErr = "* Your email address is required.";
            } else {
                $email = test_input($_POST["email"]);
                if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                    $emailErr = "* Please enter a valid email address.";
                } else {
                    $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
                    $query = "INSERT INTO survey VALUES ('" . $email . "','" . $actual_link . "','','')";
                    mysql_query($query);
                    echo '<script type="text/javascript">'
                        , 'nextPage("survey.php");'
                        , '</script>'
                        ;
                    }
                }
            }

        function test_input($data) {
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            return $data;
        }
     ?>
     <p>
     [Consent form text]
     </p>
     <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
     Please enter your email address: <input type="text" name="email" value="<?php echo $email;?>">
     <span class="error"> <?php echo $emailErr;?></span>
     <br>
     <input type="submit" value="Begin Study">
     </form>
     </div>

我确信你可以告诉我,我正在尝试进行一些表单验证。

这成功地将下一页的内容(“survey.php”)注入了consent-form div。 “survey.php”包含以下内容,使用上面显示的nextPage()函数:

$("#csp_form").on('submit', function() {
    nextPage("other.php");
});

但是这没有用“other.php”注入同意形式的div。

然而,现在,甚至表单验证都不起作用。根据Firebug,jquery库引发了某种错误,即使我注释掉了所有的jquery和javascript函数,它也陷入了一些永久的加载操作。(这个问题已得到修复。)

我即将开始扔东西。我尝试了很多其他不同的技术,但没有一种能够奏效,而且我已经忘记了它们。希望这个最新版本足以获得相关指导。

抱歉所有这么长时间,但通常人们抱怨信息太少,所以我想确保包含所有内容。

编辑:

根据请求,这是survey.php的当前完整内容(为了隐私目的,文本内容已更改):

<script type="text/javascript">
    $("#icecream_form").on('submit', function() {
        nextPage("other.php");
        return false;
    });
</script>

<br>
<h2>What's your favorite ice cream flavor?</h2>
<form method="post" id="icecream_form">
    <input type="radio" name="icecream" value="vanilla"> Vanilla
    <br>
    <input type="radio" name="icecream" value="chocolate"> Chocolate
    <br>
    <input type="radio" name="icecream" value="other"> Something else
    <br>
    <input type="radio" name="icecream" value="none" checked> I don't have a favorite.
    <br>
    <br>
    <input type="submit" name="icecream_submit" value="Go" onsubmit="return(false)">
</form>

点击提交后,来自同意表格的内容会返回,并附上电子邮件表格中的错误消息(“请输入电子邮件地址”),暗示电子邮件表格已再次发布。如果来自该div的所有内容真的被survey.php中的内容所取代,我无法理解这是怎么可能的。

1 个答案:

答案 0 :(得分:0)

我认为问题只是我在$(document).ready(function () {之前遗失了$("#icecream_form").on('submit', function() {。这使return false;能够真正发挥作用。

但是,我还用jQuery版本换掉了PHP表单验证并删除了nextPage()函数,而不是让每个页面都有自己的.load(),所以这些东西也可能有所不同。 / p>