相信用过Gmail的人都知道Gmail有一个草稿自动保存的功能,每过一段时间,Gmail都会自动保存邮件草稿,这样在一些突发情况下就能快速地恢复工作,免得写了半天的邮件眨眼之间就没有了。在学了AJAX之后,我也给自己的blog加上了这个功能。当然,这个应用并不只限于blog上,应该说还是比较通用的。
中.国站长站
实例演示 Chinaz_com
仍旧以代码加注释的方式来说明怎么编写。 Www^Chinaz^com
首先是表单填写页面,用一个ID为AutoSaveMsg的DIV来显示返回信息,并且用一个ID为Draft_AutoSave的CheckBox来确定是否进行自动保存,然后将Textarea的ID命名为message。同时为了应对多用户同时使用的需要,加上用户名,每个用户的草稿分开保存。为了说明方便,我把一些修饰性的东西去掉,这样看起来比较明了: 站.长站
以下为引用的内容:
AJAX应用之草稿自动保存<br />
中.国站长站
<!– 用户名默认为NONAME –>
站.长站
用户名:<input type="text" name="memName" id="memName" size="20" value="NONAME" /> 站.长站
<!– 在自动保存选项的onclick事件中调用自动保存状态设置函数 –>
Chinaz@com
<input onclick="SetAutoSave();" type="checkbox" id="Draft_AutoSave" value="1" checked="true" />自动保存?<br /> Chinaz^com
内容:
中.国站长站
<textarea id="message"></textarea><br /> 中.国.站长站
<!– AutoSaveMsg显示返回信息 –>
中国.站.长站
<div id="AutoSaveMsg"></div> [中国站长站]
<input type="submit" value="提交内容" /> 站长.站
<!– 调用函数恢复最后保存的草稿 –>
[中国站长站]
<input type="button" onclick="AutoSaveRestore();" value="恢复最后保存的草稿" /> [中国站长站]
</div>
Www@Chinaz@com
</div> 中国站.长.站
<!– 将JS代码放在所有对象之后,以免在页面未加载完成时出现对象不存在的错误 –> Www_Chinaz_com
<!– AJAX类 –>
中国.站长站
<script type="text/javascript" src="ajaxrequest.js"></script>
Www_Chinaz_com
<!– 自动保存代码 –> Chinaz~com
<script type="text/javascript" src="autosave.js"></script>
接下来是autosave.js 中国站长.站
// 首先设置全局变量
Www^Chinaz^com
// 要保存的内容对象FormContent
站.长.站
var FormContent=document.getElementById("message");
中国站长.站
// 显示返回信息的对象
站.长站
var AutoSaveMsg=document.getElementById("AutoSaveMsg");
中国站.长站
// 用户名 站.长.站
var memName=document.getElementById("memName").value; 中国站长.站
// 自动保存时间间隔
Chinaz_com
var AutoSaveTime=60000; 中.国.站.长.站
// 计时器对象
中国站.长站
var AutoSaveTimer;
Www^Chinaz^com
// 首先设置一次自动保存状态 站.长站
SetAutoSave();
Chinaz@com
// 自动保存函数 站.长站
function AutoSave() { Chinaz~com
// 如果内容或用户名为空,则不进行处理,直接返回
Chinaz_com
if(!FormContent.value||!memName) return;
Www~Chinaz~com
// 创建AJAXRequest对象,详细使用见文章开始的链接 Chinaz^com
var ajaxobj=new AJAXRequest;
Chinaz@com
ajaxobj.url="autosave.asp";
中.国.站长站
ajaxobj.content="memname="+escape(memName)+"&postcontent="+escape(FormContent.value);
中国站长.站
ajaxobj.callback=function(xmlObj) {
站长.站
// 显示反馈信息
中.国.站长站
AutoSaveMsg.innerHTML=xmlObj.responseText;
Chinaz.com
}
中.国站长站
ajaxobj.send(); 中.国.站.长.站
} Www@Chinaz@com
// 设置自动保存状态函数
[中国站长站]
function SetAutoSave() { 中.国.站.长.站
// 是否自动保存? 站长.站
if(document.getElementById("Draft_AutoSave").checked==true)
中国.站长站
// 是,设置计时器
中.国站长站
AutoSaveTimer=setInterval("AutoSave()",AutoSaveTime);
Www^Chinaz^com
else 中国站长.站
// 否,清除计时器 中国站长.站
clearInterval(AutoSaveTimer);
Chinaz
} Www.Chinaz.com
// 恢复最后保存的草稿
站长.站
function AutoSaveRestore() { 站.长站
// 创建AJAXRequest对象 站长.站
var ajaxobj=new AJAXRequest; 中.国站长站
// 提示用户正在恢复 Www~Chinaz~com
AutoSaveMsg.innerHTML="正在恢复,请稍候……"
中国站.长站
ajaxobj.url="autosave.asp"; 中国站长.站
ajaxobj.content="action=restore&memname="+escape(memName); Www@Chinaz@com
ajaxobj.callback=function(xmlObj) {
中.国站长站
// 提示用户恢复成功
中国.站长站
AutoSaveMsg.innerHTML="恢复最后保存成功"; Chinaz@com
// 如果内容为空则不改写textarea的内容
中国站长_站,为中文网站提供动力
if(xmlObj.responseText!="") { Chinaz
// 恢复草稿
Www_Chinaz_com
FormContent.value=xmlObj.responseText;
中国.站.长站
} [中国站长站]
} Www~Chinaz~com
ajaxobj.send()
Chinaz~com
}
最后是autosave.asp,用于在后台保存草稿:
Chinaz_com
<%@LANGUAGE="VBscript" CODEPAGE="65001"%>
站长.站
<% Option Explicit %>
中国站.长.站
<% 中.国站长站
‘ 语言为VBScript,编码为UTF-8,要求变量声明
中国站长_站,为中文网站提供动力
‘ 出现错误则忽略,继续执行 中国.站.长站
On Error Resume Next
Chinaz.com
‘ 定义一些变量 中.国站长站
Dim PostContent,memName,action,objStream
Chinaz^com
‘ 获取操作,是保存草稿还是恢复草稿 中国站.长站
action=Request.Form("action") Chinaz
‘ 获取用户名 Www.Chinaz.com
memName=Request.Form("memname")
中国站长.站
‘ 获取草稿内容
中国站长.站
PostContent=Request.Form("postcontent") Chinaz
IF action="restore" Then 站长.站
‘ 恢复草稿,如果用户名不为空则进行恢复操作
Chinaz^com
IF memName<>Empty Then
中国.站长站
‘ 使用 ADODB.Stream 来进行文件操作
中国站.长站
Set objStream = Server.CreateObject("ADODB.Stream") Chinaz^com
With objStream 中国站长_站,为中文网站提供动力
.Type = 2 中.国站长站
.Mode = 3
Chinaz_com
.Open
中国站.长.站
‘ 文件名为 autosave_ + 用户名 + .txt
Chinaz@com
.LoadFromFile(Server.MapPath("autosave_"&memName&".txt"))
Chinaz@com
.Charset = "utf-8"
中国站.长.站
‘.Position = 0 中国站.长站
PostContent = .ReadText() 站.长站
.Close Www^Chinaz^com
End With 中国.站.长站
Set objStream = NoThing 中国.站长站
‘ 输出草稿
Chinaz
IF PostContent<>"" Then Response.Write(PostContent)
中国站.长站
End IF Www^Chinaz^com
Else
Chinaz_com
‘ 保存草稿,如果草稿内容和用户名均不为空则进行保存操作
中国站.长站
IF PostContent<>Empty AND memName<>Empty Then
Chinaz
‘ 使用 ADODB.Stream 来进行文件操作
中.国.站长站
Set objStream = Server.CreateObject("ADODB.Stream")
中国站长_站,为中文网站提供动力
With objStream
中国站长.站
.Type = 2 Www@Chinaz@com
.Mode = 3
中.国站长站
.Open
Chinaz.com
.Charset = "utf-8" Www^Chinaz^com
.Position = objStream.Size
Chinaz~com
.WriteText= PostContent 中国站长_站,为中文网站提供动力
.SaveToFile Server.MapPath("autosave_"&memName&".txt"),2
Chinaz@com
.Close Chinaz_com
End With Chinaz.com
Set objStream = NoThing
中国.站.长站
‘ 输出保存是否成功信息 Chinaz_com
If Err.Number=0 then 中国站.长.站
Response.Write("最后于 "&Now()&" 自动保存成功")
中国站.长站
Else Chinaz_com
Response.Write("最后于 "&Now()&" 自动保存失败,错误号:"&Err.Number&",错误描述:"&Err.Dscription) Chinaz
End If
中国.站.长站
End IF Chinaz@com
End IF
中国站.长.站
%>
Www^Chinaz^com
至此,AJAX草稿自动保存完成了。AJAX应用之草稿自动保存
Chinaz.com
相信用过Gmail的人都知道Gmail有一个草稿自动保存的功能,每过一段时间,Gmail都会自动保存邮件草稿,这样在一些突发情况下就能快速地恢复工作,免得写了半天的邮件眨眼之间就没有了。在学了AJAX之后,我也给自己的blog加上了这个功能。当然,这个应用并不只限于blog上,应该说还是比较通用的。
Chinaz_com
实例演示
Www~Chinaz~com
仍旧以代码加注释的方式来说明怎么编写。 Www~Chinaz~com
首先是表单填写页面,用一个ID为AutoSaveMsg的DIV来显示返回信息,并且用一个ID为Draft_AutoSave的CheckBox来确定是否进行自动保存,然后将Textarea的ID命名为message。同时为了应对多用户同时使用的需要,加上用户名,每个用户的草稿分开保存。为了说明方便,我把一些修饰性的东西去掉,这样看起来比较明了: 中国站.长站
AJAX应用之草稿自动保存<br />
Www^Chinaz^com
<!– 用户名默认为NONAME –> 中.国.站长站
用户名:<input type="text" name="memName" id="memName" size="20" value="NONAME" />
Chinaz@com
<!– 在自动保存选项的onclick事件中调用自动保存状态设置函数 –>
[中国站长站]
<input onclick="SetAutoSave();" type="checkbox" id="Draft_AutoSave" value="1" checked="true" />自动保存?<br />
站.长站
内容: Chinaz_com
<textarea id="message"></textarea><br /> Www~Chinaz~com
<!– AutoSaveMsg显示返回信息 –>
中国站长.站
<div id="AutoSaveMsg"></div>
中国站长_站,为中文网站提供动力
<input type="submit" value="提交内容" /> 中国.站长站
<!– 调用函数恢复最后保存的草稿 –>
站长.站
<input type="button" onclick="AutoSaveRestore();" value="恢复最后保存的草稿" /> 中国.站.长站
</div> Chinaz_com
</div>
Chinaz~com
<!– 将JS代码放在所有对象之后,以免在页面未加载完成时出现对象不存在的错误 –>
Chinaz^com
<!– AJAX类 –> Chinaz
<script type="text/javascript" src="ajaxrequest.js"></script>
[中国站长站]
<!– 自动保存代码 –> Www_Chinaz_com
<script type="text/javascript" src="autosave.js"></script>
接下来是autosave.js Chinaz^com
// 首先设置全局变量
中.国.站长站
// 要保存的内容对象FormContent
中国站长.站
var FormContent=document.getElementById("message");
中.国.站.长.站
// 显示返回信息的对象
Www.Chinaz.com
var AutoSaveMsg=document.getElementById("AutoSaveMsg"); 中国站.长.站
// 用户名 Chinaz.com
var memName=document.getElementById("memName").value;
Www.Chinaz.com
// 自动保存时间间隔 中国站.长.站
var AutoSaveTime=60000;
Www.Chinaz.com
// 计时器对象
站.长.站
var AutoSaveTimer; Chinaz
// 首先设置一次自动保存状态 Chinaz^com
SetAutoSave();
Www_Chinaz_com
// 自动保存函数 中.国站长站
function AutoSave() { Www_Chinaz_com
// 如果内容或用户名为空,则不进行处理,直接返回 Chinaz.com
if(!FormContent.value||!memName) return;
Chinaz^com
// 创建AJAXRequest对象,详细使用见文章开始的链接
中国站长.站
var ajaxobj=new AJAXRequest; Www_Chinaz_com
ajaxobj.url="autosave.asp";
Chinaz
ajaxobj.content="memname="+escape(memName)+"&postcontent="+escape(FormContent.value); 中.国站长站
ajaxobj.callback=function(xmlObj) {
Chinaz.com
// 显示反馈信息 Www.Chinaz.com
AutoSaveMsg.innerHTML=xmlObj.responseText; Www~Chinaz~com
}
Chinaz~com
ajaxobj.send(); Chinaz@com
} [中国站长站]
// 设置自动保存状态函数 中国站.长站
function SetAutoSave() {
站.长站
// 是否自动保存? 中国站长_站,为中文网站提供动力
if(document.getElementById("Draft_AutoSave").checked==true) 中国.站长站
// 是,设置计时器 Chinaz.com
AutoSaveTimer=setInterval("AutoSave()",AutoSaveTime);
中国.站长站
else
中国站.长.站
// 否,清除计时器
中国站长_站,为中文网站提供动力
clearInterval(AutoSaveTimer);
站.长站
}
中国站长.站
// 恢复最后保存的草稿 Chinaz^com
function AutoSaveRestore() {
Chinaz^com
// 创建AJAXRequest对象
中国站长_站,为中文网站提供动力
var ajaxobj=new AJAXRequest; Www_Chinaz_com
// 提示用户正在恢复
Www.Chinaz.com
AutoSaveMsg.innerHTML="正在恢复,请稍候……"
Www.Chinaz.com
ajaxobj.url="autosave.asp"; 中国站.长站
ajaxobj.content="action=restore&memname="+escape(memName);
中国站长.站
ajaxobj.callback=function(xmlObj) {
Www^Chinaz^com
// 提示用户恢复成功
中国.站长站
AutoSaveMsg.innerHTML="恢复最后保存成功";
[中国站长站]
// 如果内容为空则不改写textarea的内容 Chinaz.com
if(xmlObj.responseText!="") {
Www~Chinaz~com
// 恢复草稿
中国站.长.站
FormContent.value=xmlObj.responseText; 站长.站
}
Chinaz.com
}
中.国站长站
ajaxobj.send() Chinaz^com
}
最后是autosave.asp,用于在后台保存草稿: 中国站.长站
<%@LANGUAGE="VBscript" CODEPAGE="65001"%> 中国站.长.站
<% Option Explicit %> Chinaz.com
<%
Www^Chinaz^com
‘ 语言为VBScript,编码为UTF-8,要求变量声明
Www^Chinaz^com
‘ 出现错误则忽略,继续执行 Chinaz
On Error Resume Next
Chinaz~com
‘ 定义一些变量
Www_Chinaz_com
Dim PostContent,memName,action,objStream Chinaz_com
‘ 获取操作,是保存草稿还是恢复草稿 Chinaz
action=Request.Form("action") 中.国站长站
‘ 获取用户名 站.长.站
memName=Request.Form("memname") 站.长站
‘ 获取草稿内容 站.长站
PostContent=Request.Form("postcontent") Www^Chinaz^com
IF action="restore" Then Chinaz~com
‘ 恢复草稿,如果用户名不为空则进行恢复操作
Chinaz@com
IF memName<>Empty Then 站.长.站
‘ 使用 ADODB.Stream 来进行文件操作
Chinaz~com
Set objStream = Server.CreateObject("ADODB.Stream") Chinaz~com
With objStream
Chinaz.com
.Type = 2
站长.站
.Mode = 3 中国站.长站
.Open
Www@Chinaz@com
‘ 文件名为 autosave_ + 用户名 + .txt Www^Chinaz^com
.LoadFromFile(Server.MapPath("autosave_"&memName&".txt"))
站长.站
.Charset = "utf-8" Chinaz~com
‘.Position = 0
中国站长_站,为中文网站提供动力
PostContent = .ReadText()
Chinaz~com
.Close Chinaz_com
End With
站长.站
Set objStream = NoThing
Chinaz.com
‘ 输出草稿
Chinaz^com
IF PostContent<>"" Then Response.Write(PostContent)
Chinaz
End IF Chinaz~com
Else
Chinaz^com
‘ 保存草稿,如果草稿内容和用户名均不为空则进行保存操作
中国站.长.站
IF PostContent<>Empty AND memName<>Empty Then Chinaz_com
‘ 使用 ADODB.Stream 来进行文件操作
Www.Chinaz.com
Set objStream = Server.CreateObject("ADODB.Stream") Chinaz_com
With objStream
Www^Chinaz^com
.Type = 2 Www_Chinaz_com
.Mode = 3 站.长.站
.Open
Www.Chinaz.com
.Charset = "utf-8"
Chinaz^com
.Position = objStream.Size 站.长站
.WriteText= PostContent 站长.站
.SaveToFile Server.MapPath("autosave_"&memName&".txt"),2
Chinaz^com
.Close 中国.站长站
End With
Chinaz
Set objStream = NoThing Chinaz_com
‘ 输出保存是否成功信息
中国站长_站,为中文网站提供动力
If Err.Number=0 then
站长.站
Response.Write("最后于 "&Now()&" 自动保存成功")
Chinaz^com
Else
中国.站.长站
Response.Write("最后于 "&Now()&" 自动保存失败,错误号:"&Err.Number&",错误描述:"&Err.Dscription)
站.长.站
End If Www_Chinaz_com
End IF
中.国站长站
End IF Www.Chinaz.com
%>
中国站长.站
Chinaz^com
至此,AJAX草稿自动保存完成了
