对我来说,看起来是正确的,但我没有经历过最轻微的AJAX经历了几个小时的尝试,尝试了许多变化,包括过滤器,这一切都没用。这是我现在所拥有的,我看不出它有什么问题。
正在发生的事情是,如果我只是刷新页面,就不会像往常那样显示聊天消息。
我想简单地尝试完成的是聊天界面,如果它有任何相关性。
以下是正在发生的事情的实例:http://www.mixpix.eu/chat/chat.php?r=G97NxXy4exbLQPFU
$(document).ready(function() {
var interval = setInterval(function() {
$.ajax({
dataType: "html",
url: 'chat.php?r=' + <?php echo "'" .$_GET['r']. "'"; ?> ,
success: function(data) {
var trim = $(data).find('.message_window');
$('.message_window').replaceWith(trim);
}
});
}, 1000);
});
这是我的身体标签的内容:
<div class="wrapper">
<div class"inbox_window" id="style-3">
</div>
<div class="message_window" id="style-3">
<table width="100%">
<p class="talking_to"><?php echo getFirstnamebyID($_GET['r']); ?></p>
<?php echo displayMessages(); ?>
</table>
</div>
<form class="submit_form" method="post" <?php echo 'action="chat.php?r='.$_GET['r'].'"' ?>>
<input type="text" name="message" placeholder="Type message here" />
<input type="submit" value="Send" name="s_say"/>
</form>
</div>
php中的displayMessages()函数:
function displayMessages() {
$user_id = getUserID();
$sql = mysql_query(strip_tags("SELECT * FROM inbox WHERE (send_id='".$user_id."' OR send_id='".$_GET['r']."') AND (rec_id='".$_GET['r']."' OR rec_id='".$user_id."') ORDER BY timestamp;"));
if (mysql_num_rows($sql) != 0) {
while($row = mysql_fetch_assoc($sql)) {
if ($row['send_id'] == $user_id) {
echo '<tr><td><p class="sm">'. $row['messages'] .'</p></td></tr>';
} else if ($row['send_id'] == $_GET['r']) {
echo '<tr><td><p class="rm">'. $row['messages'] .'</p></td></tr>';
} else {
echo "Unable to display messages.";
}
}
} else {
echo "Be the first to say hello!";
}
}
我非常感谢任何人的帮助,因为它让我有点疯狂。
答案 0 :(得分:0)
你在这里发生了一些会导致你出现问题的事情......
在JavaScript方面,setInterval
是一种保持内容最新的hacky方式,使用套接字可以更好地实现。如果你真的想这样做,返回整个文档(包括HTML head
)不是你最好的选择 - 也许发送一个额外的查询参数,告诉你的PHP只发送消息部分,或者更好但是,自您上次检查的时间戳以来添加的消息。
在您的标记中,您不能将段落标记直接放在表格或原始文本中,因为可以从PHP返回。无论如何,你并没有真正将它用作表格,列表可能更具语义性。