我有一个PHP表单,它使用jQuery / AJAX将数据提交到MySQL数据库表中。目前,我有一条消息显示“完成!”表单提交后,但希望实际数据在提交后立即显示。我有一个循环设置来显示之前在div中使用类名为“msg_container”的消息,并希望在表单提交后在这些div中显示新数据。
最好的方法是什么?任何帮助将不胜感激!
index.php javascript
<script type="text/javascript">
$(document).ready(function () {
$(".button").click(function () {
var user_id = $("textarea#uer_id").val();
var msg = $("textarea#msg ").val();
var dataString = 'user_id=' + user_id + '&msg=' + msg;
$.ajax({
type: "POST",
url: "add.php",
data: dataString,
success: function () {
alert("Done!")
}
});
return false
});
});
</script>
index.php查询
$user_id = $_GET['user_id'];
require_once('../../includes/connect.php');
$dbh = get_dbh($_SESSION['ORG_ID']);
$sth = $dbh->query ("SELECT *, user.last_name, user.first_name FROM msgs
INNER JOIN users
ON msgs.user_id = users.id
WHERE user_id = '$user_id'
ORDER BY timestamp");
$row = $sth->fetch ();
index.php HTML
<div id="msgs">
<?php while ($row = $sth->fetch ()) { ?>
<div class="msg_container">
<div class="left"><? echo $row['last_name'].', '.$row['first_name']; ?><br />
<? $timestamp = date('m/d/Y g:i a', strtotime($row['timestamp'])); echo $timestamp; ?>
</div>
<div class="right"><? echo $row['msg']; ?></div>
<div class="clear"></div>
</div>
<? } ?>
<div class="add_note">
<div class="left">Add Message</div>
<div class="right">
<form id="add_msg">
<textarea id="msg" name="msg"></textarea>
<input type='submit' class="button right-aligned" value='Submit' />
</form>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
</div>
add.php
<?php
require_once('../../includes/connect.php');
$dbh = get_dbh($_SESSION['ORG_ID']);
$user_id = $_POST['user_id'];
$msg= $_POST['msg'];
date_default_timezone_set("UTC");
$timestamp = date('Y-m-d H:i:s', strftime(gmmktime()));
date_default_timezone_set($_SESSION['TIME_ZONE']);
$sth = $dbh->prepare ("INSERT INTO msgs (id, user_id, msg, timestamp) VALUES (?, ?, ?, ?)");
$data = array (NULL, $user_id, $msg, $timestamp);
$sth->execute ($data);
session_write_close();
?>
答案 0 :(得分:3)
您可以在之前的消息之后附加新消息。像这样:
$.ajax({
type: "POST",
url: "add.php",
data: dataString,
success: function() {
alert ("Done!");
$('#msgs').append('<div class="msg_container">' +
'<div class="left">' + lastNameVariable + ', ' + firstNameVariable +
'<br />' + timeStampVariable +
'</div><div class="right">' + msg + '</div>' +
'<div class="clear"></div></div>');
}
});
您需要将名字,姓氏,时间戳等放入变量中(或者以不同的方式进行,例如进行AJAX调用以获取信息 - 无论您喜欢什么)。我不知道user_id
是什么,所以我只是想让你填写这些变量。
这只是您可以做的基本想法。如果您有任何疑问,请询问。
我希望这会有所帮助。
如果您创建了另一个名为“getname.php”的页面或类似名称(以获取名字和姓氏),该页面将根据URL中传递的用户ID显示“名字,姓氏”,这可能有效。在URL中它可以有?user_id=1234567
,然后在该页面上,它将执行mysql_query并显示名字和姓氏。这就是我要做的事情:
getname.php↓
<?
// ...
$user_id = $_GET['user_id'];
$result = mysql_query("SELECT * FROM table WHERE user_id = '$user_id' AND ...");
$row = mysql_fetch_array($result);
// ...
echo $row['last_name'] . ', ' . $row['first_name'];
// ...
?>
当然,你会按照查询的方式执行此操作,但希望这可以帮助您理解我所说的内容。然后,在你有了之后,你可以这样做:
$.ajax({
type: "POST",
url: "add.php",
data: dataString,
success: function() {
alert ("Done!");
var firstAndLast = '';
var theTime =
$.get('getname.php?user_id='+user_id, function(data) {
firstAndLast = data;
});
$('#msgs').append('<div class="msg_container">' +
'<div class="left">' + firstAndLast // this will display: "first name, last name" because of getname.php
+ '<br />' + theTime +
'</div><div class="right">' + msg + '</div>' +
'<div class="clear"></div></div>');
}
});
至于时间,您可以display it with JavaScript(当他们刷新它会显示PHP记录的时间时)或者像你为名字做的那样。
答案 1 :(得分:1)
考虑jQuery ajax方法load。这是ajax
的更高级别版本。您将发送您的请求,响应将立即放入前面的选择器元素。
$('#result').load('ajax/test.html', data);
答案 2 :(得分:0)
这只是一个快速的想法,让你去。您需要从使用AJAX调用的脚本返回数据;您将用于生成所需DIV的数据。您还需要将ajax调用更改为以下内容:
$.ajax({
type: "POST",
url: "add.php",
data: dataString,
success: function(data) {
console.log(data); //to see what's returned
//use the data to generate content you want
alert ("Done!")
}
});
由于数据的结构,最好发送JSON响应。
答案 3 :(得分:0)
在成功部分添加此代码:
success: function(data){
$('#flash').css("display","block");;
setTimeout(function () {
$('#flash').slideUp();`enter code here`}, 2000);
}
在HTML中添加以下代码:
<div id="flash" style="display:none;">Data Saved Successfully</div>