javascript - 如何使用ajax刷新并保留表单数据

标签 javascript php jquery forms

我正在制作现场讨论表。该页面从 MySQL 加载线程,并通过 AJAX 每 4 秒刷新一次。在每个线程的最后一条评论之后,有一个用于评论的文本输入(非常类似于 Facebook)。

一切正常,除了当用户在输入中写入并且页面刷新时,消息消失了。安全和隐私是这个项目的主要目标,这就是我不想使用 cookie 的原因。我尝试了很多解决方案,并搜索了几个小时来寻找解决方案,但似乎没有任何效果。

  1. 每次刷新页面时 $_post 是否有可能的解决方案?
  2. 在缓存输入值并从 $_session 或本地存储中检索它们的情况下,任何人都可以建议更具体的方法吗?即:将听众放在哪里 :)
  3. 我尝试制作一个函数,如果输入的值与“”不同,则阻止重新加载页面,但即使这样对我也不起作用。

这是我的刷新代码:

<script type="text/javascript">
    var PHP = "msgboard.php";  

    function updateShouts(){
        $('#msgboard').load(PHP);       
    }

    window.setInterval( "updateShouts()", 4000 );
</script>

这是主要的 PHP 函数:

while($row = mysql_fetch_array($resultados)) { 

    echo '<div class="post">
            <div class="user"><b>'.$row["user"].'</b></div>';
    echo '  <div class="txt">'.$row["msg1"].'</div>
          </div>';

        $sql2="SELECT * FROM table WHERE masterid = '".$row['id']."'ORDER BY id ASC";
        $resultados2 = mysql_query($sql2);
        while($row2 = mysql_fetch_array($resultados2)) { 
            echo '<div class="comment">
                    <div class="txt"><b>'.$row2['user'].'</b>';
            echo '  '.$row2['msg1'].'</div>
                  </div>';
        }

    echo '<div class="commentform">
            <form action="board.php" method="post">
            <input type="text" size="75" name="message" id="message1">
            <input type="hidden" name="masterid" value="'.$row['id'].'">
            <input type="submit" name="Submit" value="Enviar"></form>
        </div>' ;
}

提前致谢!

最佳答案

正如@aziz 在评论中指出的那样,如果您只想更新评论,则只需更新页面的那一部分。

第 1 步:将容器添加到评论中,以便您可以将更新定位到该容器

你会注意到现在有一​​个新的 div <div id="comments_contaner">在将包含所有注释的代码中。

此外,当您输出 HTML 时,关闭 PHP 标签并使用 <?= $variable ?> 会更容易/更易读。如果您需要在 HTML 中放置 PHP 变量。

msgboard.php:

<?
while($post = mysql_fetch_array($resultados))
{
?>
    <div class="post">
        <div class="user"><b><?= $post["user"]?></b></div>
        <div class="txt"><?= $post["msg1"]?></div>
    </div>
    <div id="comments_contaner">
<?
    // This code can be ommited as you can just call updateShouts() upon page load to fetch the comments
    $comments = mysql_query("SELECT * FROM table WHERE masterid = '{$post['id']}' ORDER BY id ASC");
    while($comment = mysql_fetch_array($comments))
    {
?>
        <div class="comment">
            <div class="txt"><b><?= $comment['user'] ?></b> <?= $comment['msg1'] ?></div>
        </div>
<?
    }
?>
    </div>
    <div class="commentform">
        <form action="board.php" method="post">
            <input type="text" size="75" name="message" id="message1">
            <input type="hidden" name="masterid" value="<?= $post['id'] ?>">
            <input type="submit" name="Submit" value="Enviar">
        </form>
    </div>
<?
}
?>

第 2 步:创建一个 PHP 函数来更新评论

这个函数只会输出评论,需要masterid作为一个参数来知道要输出哪些评论。

updateComments.php:

<?
    $masterid = $_GET['masterid']
    $comments = mysql_query("SELECT * FROM table WHERE masterid = '{$masterid}' ORDER BY id ASC");
    while($comment = mysql_fetch_array($comments))
    {
?>
        <div class="comment">
            <div class="txt"><b><?= $comment['user'] ?></b> <?= $comment['msg1'] ?></div>
        </div>
<?
    }
?>

第 3 步:在针对容器 div 的脚本中调用 PHP 更新函数

您需要通过 $row['id']作为 URL 中的参数

<script type="text/javascript">
    var PHP = "updateComments.php?masterid=<?= $post['id']?>";  

    function updateShouts(){
        $('#comments_contaner').load(PHP);       
    }

    window.setInterval( "updateShouts()", 4000 );
</script>

PD:我没有测试这段代码,只是为了向您展示主要思想。

编辑:更正变量名称并添加注释。

关于javascript - 如何使用ajax刷新并保留表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13849843/

相关文章:

php - 具有频繁 TRUNCATE、UPDATE 和 SELECT 的 MySQL 表

javascript - PHP 正则表达式 (.*?) 和回调\\1 等效的 JavaScript

php yii框架直接通过模型填充CActiveform dropdownlist数据?

javascript - jQuery UI datetimepicker 选项 sliderAccess 不显示按钮

javascript - 手动将 Javascript 对象转换为函数

javascript - 与 setTimeout 和 click 发生冲突的事务

javascript - 在 Ember 应用程序上设置 Airbrake

javascript - 如何知道在多选组合框中选择了多少个项目

jquery - 在使用 jQuery 或类似方法通过 IIS 表单例份验证保护的 HTML 页面中显示登录用户?

javascript - 一种图案用作不同路径的填充