我正在使用立即调用的函数模式,但这不是传递id
1.当用户点击$ user时,会传递ID并显示聊天窗口
echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>";
2.功能chatcom_load_one继续检查,如果有任何消息传递给chatcom_load_one函数。
但问题是onclick函数确实传递了id,但是立即调用的函数没有将id传递给post函数。
同样发送邮件的速度很慢?
请帮助或建议任何替代方法,我认为错误是在chat_load_one模式中。
function chat_com_one(id) {
$('#chatcom').show('fast');
(function chatcom_load_one(id) {
$.post('sendchat2.php', {
option: 'chatcom_load_one',
tocom: id
}, function (data) {
$('#chatcom #commid #commidwin').html(data);
setTimeout(chatcom_load_one(id), 1000);
});
}());
$('#chatcom_send').click(function () {
var text = document.getElementById('chatcom_text').value;
$.post('sendchat2.php', {
option: 'chat_com_send_one',
text: text,
tocom: id
}, f
function (data) {
document.getElementById('chatcom_text').value = '';
});
});
}
在我的服务器上发送功能
if($_REQUEST['option']=='chat_com_send_one'){
$session=new $session;
$text=mysqli_real_escape_string($db3->connection,$_POST['text']);
$tocom=mysqli_real_escape_string($db3->connection,$_POST['tocom']);
$sql=mysqli_query($db3->connection,"INSERT INTO chat_com(fro,tocom,mesg,time) VALUES ('$session->userid','$tocom','$text',CURRENT_TIMESTAMP)");
}
答案 0 :(得分:1)
首先,我注意到两个问题:
$.post
setTimeout(chatcom_load_one(id), 1000);
以下是修复了这些错误的代码的更新版本:
function chat_com_one(id) {
$('#chatcom').show('fast');
(function chatcom_load_one(id) {
$.post('sendchat2.php', {
option: 'chatcom_load_one',
tocom: id
}, function (data) {
$('#chatcom #commid #commidwin').html(data);
setTimeout(function () {
chatcom_load_one(id);
}, 1000);
});
}());
$('#chatcom_send').click(function () {
var text = document.getElementById('chatcom_text').value;
$.post('sendchat2.php', {
option: 'chat_com_send_one',
text: text,
tocom: id
},
function (data) {
document.getElementById('chatcom_text').value = '';
});
});
}
此外,由于您使用的是jQuery,因此可以简化document.getElementById...
。另一个更新版本(进行了一些更改以使其更具可读性):
function chat_com_one(id) {
$('#chatcom').show('fast');
(function chatcom_load_one(id) {
$.post('sendchat2.php', {
option: 'chatcom_load_one',
tocom: id
}, function (data) {
$('#commidwin').html(data);
setTimeout(function () {
chatcom_load_one(id);
}, 1000);
});
}(id));
$('#chatcom_send').click(function () {
var text = $('#chatcom_text').val();
$.post('sendchat2.php', {
option: 'chat_com_send_one',
text: text,
tocom: id
},
function (data) {
$('#chatcom_text').val('');
});
});
}
这些只是一些清理,可能还有其他清理。
修改强>
添加了devnull69对我最终更新代码的洞察力。希望它有用(如果这是问题,接受他的回答)。
修改:其他备注
你为什么在$.post
中进行chatcom_load_one
?作为$.get
,它会更有意义,并且仍会发送查询参数。这本身并不是一个问题,但它的风格很糟糕。这可能应该在名为getchat.php
的文件中,而不是做我期望查找text
参数的文件。
另外,我不知道sendchat2.php
的实现,但你应该减少超时。尝试250ms左右的时间。这不会使服务器过载,也会缩短响应时间。
答案 1 :(得分:1)
除了前面提到的问题,你还可以在没有任何参数的情况下调用立即执行的函数。您必须将(id)
参数添加到函数调用中,以便将id元素移交给函数内的本地副本。
(function chatcom_load_one(id) {
...
}(id));