发送的信息的表被存在本地local:message_infohtml
解决方案:ui
1、code
1.文本htm
能够直接得到发送失败的消息的内容和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.家书ip
仍然是获取家书的一些字段信息,而后将此家书从新发送rem
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,可是解决方案很死,不够灵活,而且没法和从新发送文本消息保持一致。get
2、string
将发送失败的信息从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,因此只能讲其当作新的数据插入。