代码之家  ›  专栏  ›  技术社区  ›  Tempname

coldfusion.ajax.submitform问题

  •  0
  • Tempname  · 技术社区  · 17 年前

    我正在开发一个应用程序,它可以在用户处理内容时自动保存内容。我目前有两种类型的内容保存。保存草稿(全新内容)并更新草稿(现有内容)。

    我遇到的问题是,当用户第一次创建新内容时,调用save draft方法。下一次自动保存应该调用更新草稿来更新当前内容。

    所有这些都是由两个变量组合在一起的。url.convid(会话ID)和form.messageID(消息ID)。

    好的,这是一些代码。

            // auto save method.
        function autoSave(){
                        savePath = 'view_message.cfm?action=autoSave' +
        '<cfif isDefined("url.convID") neq 0>&convID=<cfoutput>#url.convID#</cfoutput></cfif>&folderID=<cfoutput>#url.folderID#</cfoutput><cfif isDefined("url.profile")>&profile=<cfoutput>#url.profile#</cfoutput></cfif><cfif isDefined("url.isDraft")>&isDraft</cfif>';
                ColdFusion.Ajax.submitForm("compForm", savePath, setSaveTime);              
                autoSaveEvery(30000);       
        }
        // auto save timer
        function autoSaveEvery(ms) {
            var timeout=setTimeout("autoSave()",ms);
        }
    
    
        // display autosaved message
        function setSaveTime(res) {
            if (res) {
                document.getElementById('messageArea').innerHTML = 'Autosaved at ' + nowFormated();             
            }
        }
    

    自动保存方法首先在用户首次开始键入时调用,并在用户首次开始键入30秒后触发。当触发自动保存时,将运行以下代码。

                if(url.action eq 'autoSave'){
                if(isDefined('form')){
                    form = duplicate(form);
                    if(isDefined('url.isDraft')){
                        conversationUpdateSave(form);                   
                    }else{
                        messageDraft(form);
                    }
                }
            }
    

    然后,此代码调用以下两种方法之一:

            function messageDraft(form){
            REReplace(form.messageContent,"<[Ss][CcTt][RrYy][IiLl][PpEe][Tt]?[^>]*>.*?</[Ss][CcTt][RrYy][IiLl][PpEe][Tt]?>","","ALL");
            REReplaceNoCase(form.messageContent,"</?(a|applet|base|embed|form|frame|frameset|iframe|ilayer|input|link|meta|noframes|noscript|object|param|sound|style|script|select|textarea|table|td|tr|tbody|th)[^>]*>","","ALL");
            ReplaceNoCase(form.messageContent,"onmouseover|onmouseout|onclick|onmousedown|onkeydown|onkeyup","","ALL");
            LEFT(ReplaceNoCase(form.messageContent,"'","&##39;","All"),3000);
            messageVO.setReceiverID(memberCT.getMemberID());
            messageVO.setSenderID(lomemberCT.getMemberID());
            messageVO.setMessageContent(form.messageContent);
            messageVO.setSendMessage(false);
    
    
    
            memberGW = createObject("component","com.model.gateway.MessagesGW");
            messageCT = memberGW.sMessage_Create(messageVO);
    
            if(url.convID eq 0){
                messageVO.setConversationID(messageCT.getConversationID());
                url.convID              = messageCT.getConversationID();
            }
    
            form.messageID          = messageCT.getMessageID();
            messageCT               = messageDisplay();
        }
        // update a previously saved draft 
        function conversationUpdateSave(form){
            messageVO.setConversationID(url.convID);
            messageVO.setMessageID(form.messageID); 
            messageVO.setMessageContent(form.messageContent);
            messageVO.setSendMessage(false);
    
            memberGW = createObject("component","com.model.gateway.MessagesGW");
            messageCT = memberGW.sMessage_Update(messageVO);
    
            messageCT               = messageDisplay();
        }
    

    所以我认为问题是。调用messagedraft方法时,未设置url.convid,因此对autosave的后续调用调用conversationupdatesave方法。

    我对这个问题的Ajax部分还比较陌生,如果有人能帮我解决这个问题,我将不胜感激。

    1 回复  |  直到 17 年前
        1
  •  2
  •   Henry    17 年前

    你不需要发布所有这些代码来问这个问题。:)

    您是否考虑过使用会话,而不是通过url scpe传递convid?会话是否记住新convid的,因此任何没有id的请求都将在会话中使用convid?

    或者…让第一个(或全部)save调用将convid返回给客户机,然后客户机将在稍后的自动保存调用中使用该convid。

    推荐文章