0

我使用jquery移动对话页面作为聊天框,所以当一个用户向另一个用户发送聊天请求,并且接收用户接受请求时,一个新的对话页面会在两端成功地动态创建。问题是,当一个用户在接收用户打开对话框页面之前向另一个用户发送消息时,内容不会添加到页面中,但是当接收用户打开页面时,发送者发送另一条消息,消息被添加,如果接收用户关闭对话页面并且发送方发送另一条消息,则当接收方打开对话页面时,将显示新消息。这意味着对话页面必须至少打开一次才能动态添加内容。有没有办法解决这个问题

传递消息的服务器端代码

function send_msg($clientID, $message)
{
global $Server;
global $CLIENT;
global $USERMAP;
$me = $CLIENT[$clientID][2];
$logmsg = new SQLquery;
$logmsg->db_query("INSERT INTO chat_messages (user_hash, chat_token, chat_message, send_to) VALUES (?, ?, ?, ?)", $me,$message->chat_token, $message->msg, $message->send_to_user );
if(isset($USERMAP[$message->send_to_user]))
{
    $resp["action"]= "message";
    $resp["chat_token"]= $message->chat_token;
    $resp["msg"] = $message->msg;
    $resp["user"]= $message->send_to_user;
    $resp["msuasa"] = "shitmananana";
    var_dump($resp);
    var_dump($USERMAP[$message->send_to_user]);
    $Server->wsSend($USERMAP[$message->send_to_user], json_encode($resp));
}
}

以下是该页面的创建方式 *注意 * 该页面是从模板中克隆的:

function create_chat_page(user, chat_token) {
  var sel_id = "#" + user;
  $("#chat_page").clone().insertAfter("#chat_page").attr("id", chat_token).attr("data-chat_to", user).trigger("create");
  var pic_thum = $(sel_id + " img").attr("src").substring(36);
  $("#" + chat_token + " .user_chat_icon").html("<img src='../../photos/users/icons/icon_" + pic_thum + "'/>");
  $(sel_id + " h2").clone().addClass("user_chat_name").insertAfter("#" + chat_token + " .user_chat_icon");
}

消息事件的客户端何时从服务器中整理出消息

function chat_inc_sort(data)
{
switch (data.action)
{
    case "message":
    sort_message(data);
    break;

    case "rec_req":
    process_req(data);/*********/
    break;

    case "accept":
    accept_req(data);
    break;

    case "reject":
    reject_req(data);
    break;

    case "set_status":
    set_status(data.user, "online");
    break;

    case "unset_status":
    set_status(data.user, "offline");
    break;
}
}

这个函数调用 putMessage 函数

function sort_message(data)
{
var d = new Date();
var ixesha = d.getHours().toString() + ":"+ d.getMinutes().toString();
putMessage(data.user.toString(), data.chat_token.toString(),data.msg.toString(),ixesha);
}

这就是接收到的消息在屏幕上的显示方式

function putMessage(user, chat_token, msg, time) {
  alert(time);
  var sel_id = "#" + chat_token;
  $(sel_id + " div .chat_box").append("<div>" + time + "<p class='usr_txt'>" + msg + "</p></div>");
}

这是克隆的模板

<div id="chat_page" class="chat_screen" data-role="page" data-theme="b" data-close-btn="none">
 <div data-role="header" data-position="fixed">
   <span class="user_chat_icon" data-inline="true" class="ui-btn-left"></span>
   <a href="#" data-inline="true" class="ui-btn-right">close</a>
 </div>
 <div class="chat_box" data-role='content'></div>
 <div data-role="footer" data-position="fixed">
   <textarea class="msg_box" data-inline="true" cols="30" rows="2" maxlength="500"></textarea>
   <a class="send_msg" data-role="button" data-inline="true" data-theme="a">send</a>
 </div>
</div>
4

0 回答 0