【问题标题】:jQuery/AJAX and SQL query not displaying html form inputs on browser permanently upon refreshing the browser?刷新浏览器后,jQuery/AJAX 和 SQL 查询不会在浏览器上永久显示 html 表单输入?
【发布时间】:2015-02-07 15:09:28
【问题描述】:

我想在我的浏览器中显示我所有的 textarea 输入(因为如果我刷新我的页面,所有数据都从我使用 jquery/ajax 通过我的 html 表单发送的数据中消失了)。因此,当前使用来自 homepage.php 的 jquery/ajax 信息正在通过我的#textarea 输入发送到 data.php,并且成功返回以显示是我的#status div。每次我点击 POST 按钮时,数据都会添加到浏览器中,但是当我刷新页面时,数据全部丢失(即使信息存储在我的 sql 表中)。我知道我需要使用 while() 循环,并且我已经尝试过,但是我的代码都没有针对我想要实现的目标起作用。

主页.php

<?php
include("connection.php");

session_start();


if(isset($_SESSION['user_id']) && $_SESSION['user_id'] != "") {

        $sid = $_SESSION['user_id'];

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$sql = "SELECT * FROM `users` WHERE id='{$sid}'";

 $query = $conn->query($sql);



$result = $query->fetch_assoc();


$fname = $result['fname'];

$lname = $result['lname'];

$time = time();


    }


      else {

        header("location:login.php");
    }

?>

<html>
<head>


<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">

//daddy code
$ (document).ready(function() {

//mama code
$("button#postbutton").click(function() {

 var data = $("#formpost").serialize();
 var posterid = <?php echo $sid; ?>;

$.ajax({

type: "POST",

url: "data.php",

data: data,

success: function(data) {

$("#statustext").append(data);
$("textarea#text1").val('');
}

});



});



});



</script>
</head>

<body>


<div id="global">

<form id="formpost" action="" method="post" onsubmit="return false">

<textarea id="text1" name="status" value="" ></textarea>


<button id="postbutton">POST</button>

<a href="logout.php">LOGOUT</a>

</form>

<br/>
<br/>


<div id="allstatus">

<!-- SKELETON -->


<div id="wholestatus">


<div id="statuspic">
</div>


<div id="statusinfo">

<div id="statusname"><?php echo " Welcome to VLE, {$fname} {$lname} ";?></div>
<div id="statustext"> </div>


</div>


</div>  


<!-- SKELETON -->


</div>


</div>


</body>


</html>

数据.php

<?php



const DB_HOST = 'localhost';
const DB_USER = 'root';
const DB_PASS = '';
const DB_NAME = 'forum';
//connecting 

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

if($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
} else {

 }


if(isset($_POST['status']))
{
$var = $_POST['status'];

$sql = "INSERT INTO `question`(id, question) VALUES ('', '{$var}')";
$result = $conn->query($sql);
if($result) {  }

    else {

    echo "failed: " . $conn->error;
   }


echo  "<br>{$var}";



}





 ?>

【问题讨论】:

  • 您是否尝试过 Ctrl+F5 或 Ctrl+R 强制刷新?可能是输出缓存在浏览器中。如果这是问题所在,您可以设置一个标头来告诉浏览器它不应该缓存该页面。
  • 状态并没有真正在客户端上持续存在,因此当您刷新时,您基本上是从头开始。如果您仍然使用 ajax,为什么还要刷新页面?
  • 我只想使用获取 assoc 的 while 循环从 sql 表中检索所有数据。问题是我的代码不起作用...我的 $var 包含所有 textarea 输入并存储在 sql 表问题中,但是当我刷新浏览器时,html 显示消失了。如果你明白我的意思..
  • 例如 $query = "SELECT * FROM question "; $result = $conn->query($query); while($row = $result->fetch_assoc()) { echo "
    {$row['question']}"; } 但这没有以正确的方式显示我的 sql 表。
  • 这就是浏览器和刷新的本质。当您刷新时,它不记得您之前在做什么或在浏览器或您的页面上发生了什么......所以当然您的 HTML 已经消失了。您需要在页面中查询数据库,以便每次加载时都会看到结果。但是就像我已经说过的那样,当您已经在使用 ajax 时,为什么还要依赖/搞乱页面刷新?发帖后,为什么要刷新?只需使用成功函数显示结果即可。

标签: php html ajax


【解决方案1】:

您的选择正在调用特定的会话 ID,但您的插入未在 id 列内存储任何内容。

【讨论】:

  • 它设置为自动递增,并且在我检查时 id 被存储在我的 sql 表中
  • 您的 Session id 是如何连接到这个自动递增的表 id 的?
【解决方案2】:

如果您使用 ajax,我不确定您为什么一直在谈论页面刷新,因为 ajax 允许您在不刷新页面的情况下发送/检索数据。

在您的成功函数中,返回的任何内容都在您的名为 data 的变量中,但我敢打赌,如果您查看此变量的内容,您会发现它没有任何内容,因为您的 data.php 不是设置以给出正确的响应。

您需要在您的 data.php 文件中使用它...

header('Content-Type: application/json');

然后当你回应响应时,你需要这样做......

echo json_encode($var);

现在,在成功函数中,您的 data 将保存 $var 的内容,而 $var 实际上保存的是 $_POST['status'] 的内容。

那么在success函数中你可以像这样显示结果...

$('#statustext').html(data)

【讨论】:

  • 我明白,我想我做错了,因为我想创建一个浏览器,用户可以在其中发布问题供其他人查看。因此,如果我刷新浏览器,所有发布的问题都消失了(尽管在数据库中)这一事实完全没有意义。
  • 创建浏览器是什么意思?将内容放入数据库和从数据库中检索内容是两个独立的步骤。为了让我加载一个页面并查看您放入数据库的内容,该页面需要包含查询数据库并获取该信息的代码。
  • 是的,这就是使用 while() 循环,但是当我单击发布时会显示数据。无论 .click 事件如何,我都希望它显示
  • 你没有使用while循环,你在说什么?而且我想我不能再帮你了,因为我已经解释了你需要知道的一切。
猜你喜欢
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多