重發發送失敗的消息--衆學

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

相關文章
相關標籤/搜索