我试着打电话给我的变种" o"或""或null或false或" undefined"但它不起作用。我的问题是,我与一个代码聊天,说要在2秒内自行重新加载页面,但如果有人在textarea中写,那么它会删除文本。我需要一个代码,说每2秒重新加载一次页面,但如果有人在textarea中写入,那么它应该在发送文本后重新加载。 你可以看到代码,如果你想尝试代码只需复制它。但首先你必须在你的sql中创建一个名为" my_db"的数据库。然后运行该页面。
<?php
$hostname_db = "localhost";
$database_db = "my_db";
$username_db = "root";
$password_db = "";
$db = mysql_pconnect($hostname_db, $username_db, $password_db) or trigger_error(mysql_error(),E_USER_ERROR);
?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
//select db and create table to chat
$conn = new PDO("mysql:host=$hostname_db", $username_db, $password_db);
$sql = "use my_db";
$conn->exec($sql);
$sql = "CREATE TABLE IF NOT EXISTS `chatroom`(
`idmassage` int(11) NOT NULL AUTO_INCREMENT,
`massage` text NULL,
`user` varchar(50) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`idmassage`)
) ENGINE=InnoDB DEFAULT CHARSET=hebrew ";
$conn->exec($sql);
//select chatroom from dataase
mysql_select_db($database_db, $db);
$query_chat = "SELECT massage, `user`, `date` FROM chatroom ORDER BY idmassage ASC";
$chat = mysql_query($query_chat, $db) or die(mysql_error());
$row_chat = mysql_fetch_assoc($chat);
$totalRows_chat = mysql_num_rows($chat);
//inser new data
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "chat")) {
$insertSQL = sprintf("INSERT INTO chatroom (massage) VALUES (%s)",
GetSQLValueString($_POST['massage'], "text"));
mysql_select_db($database_db, $db);
$Result1 = mysql_query($insertSQL, $db) or die(mysql_error());
$insertGoTo = "chatTest.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
//mysql_close($db);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<style type="text/css">
body {
margin: 0;
background-color: #D4CACB;
}
.chat {
width: 60%;
background-color: #878787;
position: fixed;
}
.chat .massagechat {
overflow-y: scroll;
width: 100%;
height: 400px;
}
#chat #massagechat #refresh {
width: 100%;
background-color: #FFFFFF;
margin-top: 14px;
}
body p {
position: fixed;
float: right;
margin-top: 482px;
margin-left: 94px;
}
</style>
</head>
<body>
<div id="chat" class="chat">
<div id="massagechat" class="massagechat">
<?php do { ?>
<div id="refresh">
<p1><?php echo $row_chat['user']." ".$row_chat['date']."</br>"; ?></p1>
<p2><?php echo $row_chat['massage']; ?></p2>
</div>
<?php } while ($row_chat = mysql_fetch_assoc($chat)); ?>
</div>
<div class="form">
<form method="POST" action="<?php echo $editFormAction; ?>" name="chat">
<textarea name="massage" id="input" placeholder=" "></textarea>
<input id="submit" type="submit">
<input type="hidden" name="MM_insert" value="chat">
</form>
</div>
</div>
<p>dddd</p>
<p><?php echo $row_chat; ?></p>
</body>
</html>
<?php
mysql_free_result($chat);
?>
<script>
$( "div.massagechat" ).scrollTop( 999999*999999);
</script>
<script>
////////////
$('textarea').on('keyup',function(){
var input = $(this);
if(input.val().length == ""){
var cacheData;
var data = $("chat").html();
var auto_refresh = setInterval(
function ()
{
$.ajax({
url: 'chatTest.php',
type: 'POST',
data: data,
dataType: 'html',
success: function(data) {
if (data !== cacheData){
//data has changed (or it's the first call), save new cache data and update div
cacheData = data;
$("#chat").html(data);
}
}
})
}, 2000);};})// check every 30000 milliseconds
</script>
答案 0 :(得分:0)
setInterval
函数不应位于文本区域的 keyup 事件下。您可以将它放在文档就绪处理程序下。
同样在setInterval函数内部检查文本区域值,仅在它不为空时发送请求。
像这样,
$(document).ready(function(e){
var auto_refresh = setInterval(
function ()
{
if($('textarea').val().trim()!='') {
$.ajax({
url: 'chatTest.php',
type: 'POST',
data: data,
dataType: 'html',
success: function(data) {
if (data !== cacheData){
//data has changed (or it's the first call), save new cache data and update div
cacheData = data;
$("#chat").html(data);
}
}
});
}
}, 2000);
});