I am using immediately invoked functions pattern, but this is not passing the id
1.When the user clicks on $user, id is passed and the chat window appears
echo "<div class='boxbottom'><a href='#' onclick=chat_com_one($id);> >$user</a><br></div>";
2.Function chatcom_load_one keep checking, if there is any message from the id passed to chatcom_load_one function.
But the problem is that onclick function do passes the id but immediately invoked function did not pass the id to the post function.
Also sending the message is slow?
Please help or suggest any alternate approach, I think error is in the chat_load_one pattern.
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 = '';
});
});
}
send function on my server
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)");
}
First off, I notice two problems:
$.postsetTimeout(chatcom_load_one(id), 1000);Here’s an updated version of your code with these errors fixed:
Also, since you’re using jQuery, you can simplify
document.getElementById.... Another updated version (with some more changes to make it more readable):These are just a few cleanups, there may be others.
Edit:
Added devnull69’s insight to my final updated code. Hopefully it’s useful (accept his answer if this was the problem).
Edit: Other notes
Why are you doing
$.postinchatcom_load_one? It would make much more sense as a$.get, and the query parameters would still be sent. It’s not really a problem per se, but it’s bad style. This should probably be in a file calledgetchat.phpor something instead of doing what I expect is looking for thetextparameter.Also, I don’t know the implementation of
sendchat2.php, but you should probably reduce the timeout. Try something like 250ms or so. That’s not going to overload the server and it’ll improve response time.