ColdFusion.Ajax.submitForm问题

时间:2009-09-15 23:57:34

标签: ajax coldfusion

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

我遇到的问题是当用户第一次创建新内容时,会调用Save Draft方法。下一次自动保存应调用Update 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,以便后续调用自动保存调用方法conversationUpdateSave。

对于这个问题的ajax部分我是相当新的,任何人都可以拍摄我的方式的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您无需发布所有这些代码来提出问题。 :)

您是否考虑使用Session?而不是通过Url scpe传递convID?让Session记住新的convID,所以任何没有ID的请求都会在Session中使用convID吗?

或者......让第一个(或全部)保存呼叫将convID返回给客户端,然后客户端将在稍后的自动保存呼叫中使用该convID。