发送的信息的表被存在本地local:message_info
解决方案:
一、
1.文本
可以直接获得发送失败的消息的内容和message_id,然后将此消息当做新消息,重新发送
function resendTextMessage(messageId,data){
var sendMsg = escape(decodeURIComponent(data));
var flag = "message_id_"+messageId;
ueppscript('', "content", "sendTextMessage('"+sendMsg+"');");
$("#"+flag).remove();
delete_message_info(messageId);
}
但是存在一个bug,如果渲染出来的对话框中有表情,则获取的sendMsg就会是图片,而不是文本,这样则无法处理。
2.家书
仍然是获取家书的一些字段信息,然后将此家书重新发送
function resendHomeBook(messageId,home_book_id){
var home_data = [];
var homeData = {};
var objli = $('#message_id_'+messageId);
var title = objli.find(".item-title").text();
var content = objli.find(".item-con").html();
homeData.home_book_id = home_book_id;
homeData.home_book_title = title;
homeData.home_book_content = encodeURIComponent(content);
home_data.push(homeData);
sendHomebookMessage(JSON.stringify(home_data));
objli.remove();
delete_message_info(messageId);
}
此方法当前不存在bug,但是解决方案很死,不够灵活,并且无法和重新发送文本消息保持一致。
二、
将发送失败的信息从message_id中load出来,然后将此对象进行格式上的封装,与直接发送的信息保持一致,再将此对象直接扔进原来的方法,进行重新发送。
function resendMessage(messageId){
query_message_info(messageId,function(data){
if(data.length>0){
var datas = {};
* datas['data'] = new Array();
* data[0].messageId = uuid();
* var receiveTime = parseInt(Now())+1;
* data[0].receiveTime = receiveTime;
* data[0].timeStamp = new Date().valueOf();
if(data[0].content != undefined && data[0].content != 'undefined')
data[0].content = JSON.parse(decodeURIComponent(data[0].content));
if(data[0].extra !=undefined && data[0].extra != 'undefined')
data[0].extra = JSON.parse(decodeURIComponent(data[0].extra));
datas['data'][0] = data[0];
addMessage(datas,messageTargetID, true, true);
}
$("#message_id_"+messageId).remove();
delete_message_info(messageId);
})
}
此方法便是将message_info中的对象直接取出来进行封装,不用管它具体是文本还是家书,直接将其修改保持格式一致再发送就OK
加“*”的代码则是将数据进行封装,因为调用的addMessage()方法中被规定了这种格式,否则无法调用。其中三个属性需要装入新的值,messageId和两个time,time涉及到增量,所以需要保持实时,messageId则是由于要根据主键删除旧的message_info,所以只能讲其当做新的数据插入。