Php 为什么立即调用的函数不能正常工作
我使用的是立即调用的函数模式,但这不是传递id 1.当用户单击$user时,会传递id并显示聊天窗口Php 为什么立即调用的函数不能正常工作,php,javascript,Php,Javascript,我使用的是立即调用的函数模式,但这不是传递id 1.当用户单击$user时,会传递id并显示聊天窗口 echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>"; 在我的服务器上发送函数 if($_REQUEST['option']=='chat_com_send_one'){ $sessio
echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>";
在我的服务器上发送函数
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)");
}
首先,我注意到两个问题:
- 参数列表中的
$有语法错误。post
- 您可能不想这样做:
setTimeout(chatcom\u load\u 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…
。另一个更新版本(进行了更多更改以使其更具可读性):
这些只是一些清理,可能还有其他清理
编辑:
将devnull69的见解添加到我最终更新的代码中。希望这是有用的(如果这是问题,请接受他的答案)
编辑:其他注释
你为什么要做$。在chatcom\u load\u one
中发布?作为一个$.get
,它将更有意义,并且查询参数仍将被发送。这本身并不是一个问题,但这是一种糟糕的风格。这可能应该在一个名为getchat.php
的文件中,或者其他一些文件中,而不是像我期望的那样查找text
参数
另外,我不知道sendchat2.php
的实现,但是您可能应该减少超时时间。试试250ms左右。这不会使服务器过载,而且会提高响应时间。除了前面提到的问题之外,您可以在不使用任何参数的情况下调用立即执行的函数。您必须将(id)
参数添加到函数调用中,以便将id元素交给函数内部的本地副本
(function chatcom_load_one(id) {
...
}(id));
您在上一次的$中遇到语法错误。post
:f function
@tjameson如何删除此错误我在回答中做了一系列修复,希望能有所帮助。谢谢,但tocom id仍然没有传递。请查看@devnull69的回答。我将其添加到我的邮件中,但如果修复了,请接受他的邮件。@tjameson现在工作正常,但为什么发送邮件速度慢(显示在聊天窗口中大约需要2-3秒)。请提供帮助。@tjameson发送速度慢。您是否可以在您的答案中添加$.get或其他方法。谢谢这将需要更改您的服务器代码,而我无权访问该代码。既然你的问题已经得到了回答,也许是时候开始一个新的问题了?
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('');
});
});
}
(function chatcom_load_one(id) {
...
}(id));