好的嗨 帮助帮助 我遇到了setTimeout的一个主要问题,它没有工作,我做的一切都没有工作
我正在开发一个聊天系统,所以我需要发送和接收消息(我打开2个浏览器窗口测试它)
这是我多次更改的代码 我希望任何人都可以帮助我
的javascript
$(document).ready(function()
{
updateMsg();
});
function updateMsg()
{
$.ajax({
url:"db.php",
type:"POST",
success:function(data){
}
});
setTimeout("updateMsg()",7000);
}
function addMessages()
{
$.ajax({
url:"db.php",
type:"POST",
data:"name="+$("#name").val()+"&to="+$("#user2").val()+"& cc="+$("#user").val()+"&msg="+$("#msg").val(),
success:function(data)
{
$("#t1").prepend(data);}
});
}
php
$user_select = mysql_query("SELECT * FROM User WHERE User_name = '$name'")
or die(mysql_error());
$fetch_select = mysql_fetch_array($user_select);
$user_check = mysql_num_rows($user_select);
if(isset($_POST['msg']) && $_POST['msg'] != '')
{
if ($user_check == 0)
{
mysql_query("INSERT INTO User (User_name) VALUES ('$name')") or die(mysql_error());
$new_user = mysql_query("SELECT * FROM User WHERE User_ID = LAST_INSERT_ID()");
$fetch_new_user = mysql_fetch_array($new_user);
mysql_query("INSERT INTO Messages(From_user,Msg_body,Date_Time)
VALUES ('$fetch_new_user[User_ID]','$msg',NOW())") or die(mysql_error());
}
else
{
mysql_query("INSERT INTO Messages(From_user,Msg_body,Date_Time)
VALUES ('$fetch_select[User_ID]','$msg',NOW())") or die(mysql_error());
}
}
$sql = mysql_query("SELECT Msg_body,Date_Time,User_name
FROM Messages,User
WHERE From_user = User_ID
AND Msg_ID = LAST_INSERT_ID()
ORDER BY Date_Time DESC") or die(mysql_error());
while($result = mysql_fetch_array($sql))
{
$mydata = '<tbody id="tbody1">
<tr class="highlight">
<td width="30" id="bullet" align="center">
<a href="#" class="nohighlight">•</a></td>
<td width="30px" align="center" id="replyImg"><input type="image" src="css/images/reply_arrow.png" onClick="reply()"></input></td>
<td width="70" align="Left" id="time">'.$result["Date_Time"].'</td>
<td width="200" align="Left" id="from">'.$result["User_name"].'</td>
<td width="200" align="Left" id="to">'.$result[""].'</td>
<td id="showMsg">'.$result["Msg_body"].'</td>
<td width="200" align="left" id="group">'.$result["Grp_abr"].'</td>
</tr>
</tbody>';
}
echo $mydata;
?>
谢谢你们
答案 0 :(得分:1)
there's anything wrong with setTimeout
的可能性很小。除了启动Ajax请求之外,您可以通过让updateMsg()
在运行时看到某些内容来自行检查;做一个alert()
或改变页面上某个方框的颜色。
如果这是你正在运行的代码,那么你遇到的最明显的问题是你的Ajax调用的回调函数是空的,所以没有做任何事情。
答案 1 :(得分:1)
可能没有达到setTimeout()。 在那里放一个警报()。
此外,您应该在回调函数中使用setTimeout()。否则,如果HTTP请求花费的时间太长,您将开始执行多个HTTP请求,而旧的请求仍将处于待处理状态。如果服务器已经超载,肯定会崩溃服务器,或者如果超过限制(通常是一次两个单独的请求),则会在浏览器中构建HTTP请求队列
在回调中放置setTimeout()可确保调用是同步/线性的。因此,您一次只能有一个HTTP请求。
即:
function updateMsg()
{
$.ajax({
url:"db.php",
type:"POST",
success:function(data){
}
});
setTimeout("updateMsg()",7000);
}
应该是:
function updateMsg()
{
$.ajax({
url:"db.php",
type:"POST",
success:function(data){
// after processing your stuff
// make sure the next request is linear
setTimeout("updateMsg()",7000);
},
fail: function() { /* handle your failed reqeust */ }
});
}
这不能解决您的问题,但它会解决您以后遇到的问题。 您还需要处理失败的请求。
答案 2 :(得分:0)
这与我最初开始的不同,但嘿,这是编程 JavaScript的 一种在屏幕上更新消息的功能。
var last_msg_id = 0;
function updateMessage()
{
$.ajax({
type: "post",
url: "db.php",
data : {MsgNo :last_msg_id},
dataType: "xml" ,
success: function(data){
$(data).find("message").each(function() {
var msg_id = $(this).find("msg_id").text();
var date_time = $(this).find("date_time").text();
var from_user = $(this).find("from_user").text();
var from_user_id = $(this).find("from_user_id").text();
var from_group_id = $(this).find("from_group_id").text();
var from_group = $(this).find("from_group").text();
var from_grp_abr = $(this).find("from_grp_abr").text();
var from_kind = $(this).find("from_kind").text();
var row_bg_clr = $(this).find("from_bg_color").text();
var to_user = $(this).find("to_user").text();
var to_user_id = $(this).find("to_user_id").text();
var to_group = $(this).find("to_group").text();
var to_group_id = $(this).find("to_group_id").text();
var to_grp_abr = $(this).find("to_grp_abr").text();
var to_bg_color = $(this).find("to_bg_color").text();
var to_kind = $(this).find("to_kind").text();
var msg_type = $(this).find("msg_type").text();
var msg = $(this).find("msg").text();
var onlydate = getonlydate(date_time);
var class_flag = ($(this).find("flagged").text() == 'true') ? 'flagged' : 'unflag';
var reply = (to_group_id == $("#group_id").val()) ? 'reply' : '';
var handle_reply = (from_user == "") ? from_grp_abr : from_user;
//var styleclass = (8)? 'smoke' : 'blue';
if (from_kind == 3)
{
var centerDiv = 'centerPopup(event,"changeObsLabel");';
var change_label = 'change_label('+msg_id+',"'+msg_type+'","changeObsLabel");';
}
else if (from_kind == 4)
{
var centerDiv = 'centerPopup(event,"changeUserLabel");';
var change_label = 'change_label('+msg_id+',"'+msg_type+'","changeUserLabel");' ;
}
else
{
var centerDiv = 'centerPopup(event,"changeAnimLabel");';
var change_label = 'change_label('+msg_id+',"'+msg_type+'","changeAnimLabel");' ;
}
var html = "<tr class='active' style='background-color:#"+row_bg_clr+"' id='row_"+msg_id+"'>";
html += "<td><a class='"+reply+"' onclick=\"reply('"+escape(handle_reply)+"','"+escape(to_user)+"',"+from_user_id+","+to_user_id+");\"> <\/a><\/td>";
html += "<td class='time'>"+date_time+"<\/td>";
html += "<td>"+from_user+" ["+from_grp_abr+"]"+"<\/td>";
html += "<td>"+to_user+" ["+to_grp_abr+"]"+"<\/td>";
html += "<td><a id='type_of_msg_"+msg_id+"' class="+msg_type+" onclick="+centerDiv+change_label+"> <\/a><\/td>";
html += "<td><a id='flag_"+msg_id+"' class='"+class_flag+"' onclick=\"flagMsg("+msg_id+",'"+row_bg_clr+"')\"> <\/a><\/td>";
html += "<td>"+msg+" "+"<span style='color:gray'>["+msg_id+"]</span><\/td>";
html += "<td>"+from_grp_abr+"<\/td><\/tr>";
$("#tbody1").prepend(html);
//append data to tab2 messages received
if (to_group == $("#login").val())
{
$("#tbody2").prepend(html);
}
//append data to tab3 sent messages
else if (from_group == $("#login").val())
{
$("#tbody3").prepend(html);
}
if (class_flag == 'flagged')
{
$("#tbody4").prepend(html);
}
if(to_kind == 3 || from_kind == 3){
$("#tbody5").prepend(html);
}
if(from_group != $("#login").val())
{
$("#tbody"+from_group).prepend(html);
}
if(to_group != $("#login").val())
{
$("#tbody"+to_group).prepend(html);
}
last_msg_id = msg_id;
});
alternateRows();
setTimeout('updateMessage()', 3000);
},
error: function(){
setTimeout('updateMessage()', 3000);
},
async: false
});
}
在数据库中插入新消息的函数
function addMessages()
{
if(document.getElementById('name').value == "")
{
alert("Missing a sender");
}
else if (document.getElementById('user2').value == "")
{
alert("Missing a receiver");
}
else if (document.getElementById('msg').value == "")
{
alert("Missing a message");
}
else {
$.ajax({
url:'insert.php',
type:'post',
data:{name: $("#name").val(), from_user_id:$("#from_user_id").val(),from_grp_id:$("#from_grp_id").val(),user2: $("#user2").val(), to_user_id: $("#to_user_id").val(),to_grp_id:$("#to_grp_id").val(), message:$("#msg").val(), label:$("#label").val()},
success:function(data)
{
if (data == 'new user')
{
checkNewRole();
$("#name").val("");
$("#user2").val("");
$("#msg").val("");
$("#label").val("empty");
}
else
{
$("#name").val("");
$("#user2").val("");
$("#msg").val("");
$("#label").val("empty");
}
}
});
}
}
至于php,它或多或少保持不变。