我正在开发一款可在用户处理内容时自动保存内容的应用。我目前有两种类型的内容保存。保存草稿(全新内容)和更新草稿(现有内容)。
我遇到的问题是当用户第一次创建新内容时,会调用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部分我是相当新的,任何人都可以拍摄我的方式的任何帮助将不胜感激。
答案 0 :(得分:2)
您无需发布所有这些代码来提出问题。 :)
您是否考虑使用Session?而不是通过Url scpe传递convID?让Session记住新的convID,所以任何没有ID的请求都会在Session中使用convID吗?
或者......让第一个(或全部)保存呼叫将convID返回给客户端,然后客户端将在稍后的自动保存呼叫中使用该convID。