發送的信息的表被存在本地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,因此只能講其當作新的數據插入。