欢迎光临
我们一直在努力

AJAX应用之草稿自动保存

建站超值云服务器,限时71元/月

相信用过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" />&nbsp;&nbsp;&nbsp;&nbsp; 站.长站

<!– 在自动保存选项的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="提交内容" />&nbsp;&nbsp; 站长.站

<!– 调用函数恢复最后保存的草稿 –>

[中国站长站]

<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" />&nbsp;&nbsp;&nbsp;&nbsp;

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="提交内容" />&nbsp;&nbsp; 中国.站长站

<!– 调用函数恢复最后保存的草稿 –>

站长.站

<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草稿自动保存完成了

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » AJAX应用之草稿自动保存
分享到: 更多 (0)