.

AJAX+JS 文章自动保存功能
分类:电脑知识 发表于:2011-05-23 10:38:18 评论(10)


编写文章时,突然不小心碰到了插头,或者突然的一个断电,让你辛辛苦苦,热情洋溢编写的文章,瞬间消失时,你会不会气得跳脚,有种要砸了电脑的冲动?

OK,本人非常明白你的感受,因为本人也是资深受害者。。。于是。。。今天。。。翻箱倒柜找出自动保存功能,让你无后顾之忧,继续洋洋洒洒。。。

首先是表单页面:

<!-- 编写文章的文本域 -->

<textarea cols="10" rows="6" id="content"></textarea>

<!-- AutoSaveMsg显示返回信息 -->

<div id="AutoSaveMsg"></div>

<input type="button" onclick="AutoSaveRestore();" value="恢复最后保存的草稿">

<!-- 将JS代码放在所有对象之后,以免在页面未加载完成时出现对象不存在的错误 -->

<!-- AJAX类 -->

<script type="text/javascript" src="ajaxrequest.js"></script>

<!-- 自动保存代码 -->

<script type="text/javascript" src="autosave.js"></script>

=====以下代码存成autosave.js=====

// 要保存的内容对象FormContent

var FormContent=document.getElementById("content");

// 显示返回信息的对象

var AutoSaveMsg=document.getElementById("AutoSaveMsg");

// 自动保存时间间隔

var AutoSaveTime=60000;

// 计时器对象

var AutoSaveTimer;

// 首先设置一次自动保存状态

SetAutoSave();

// 自动保存函数

function AutoSave()

{

// 如果内容为空,则不进行处理,直接返回

if(!FormContent.value) return;

// 创建AJAXRequest对象,

var ajaxobj=new AJAXRequest;

ajaxobj.url="inc/autosave.asp";

ajaxobj.content="postcontent="+escape(FormContent.value);

ajaxobj.callback=function(xmlObj)

{

// 显示反馈信息

AutoSaveMsg.innerHTML=xmlObj.responseText;

}

ajaxobj.send();

}

// 设置自动保存状态函数

function SetAutoSave()

{

AutoSaveTimer=setInterval("AutoSave()",AutoSaveTime);

}

// 恢复最后保存的草稿

function AutoSaveRestore()

{

// 创建AJAXRequest对象

var ajaxobj=new AJAXRequest;

AutoSaveMsg.innerHTML="正在恢复,请稍候……"

ajaxobj.url="inc/autosave.asp";

ajaxobj.content="action=restore";

ajaxobj.callback=function(xmlObj)

{

AutoSaveMsg.innerHTML="恢复最后保存成功";

// 如果内容为空则不改写textarea的内容

if(xmlObj.responseText!="")

{

// 恢复草稿

FormContent.value=xmlObj.responseText;

}

}

ajaxobj.send()

}

=====以下代码存成autosave.asp,经验证其中autosave.txt需要先建立=====

<%

Dim PostContent,action,objStream

´获取操作,是保存草稿还是恢复草稿

action=Request.Form("action")

´获取草稿内容

PostContent=Request.Form("postcontent")

IF action="restore" Then

Set objStream = Server.CreateObject("ADODB.Stream")

With objStream

.Type = 2

.Mode = 3

.Open

.LoadFromFile(Server.MapPath("autosave.txt"))

.Charset = "utf-8"

´.Position = 0

PostContent = .ReadText()

.Close

End With

Set objStream = NoThing

´输出草稿

IF PostContent<>"" Then Response.Write(PostContent)

Else

´保存草稿,如果草稿内容不为空则进行保存操作

IF PostContent<>Empty Then

Set objStream = Server.CreateObject("ADODB.Stream")

With objStream

.Type = 2

.Mode = 3

.Open

.Charset = "utf-8"

.Position = objStream.Size

.WriteText= PostContent

.SaveToFile Server.MapPath("autosave.txt"),2

.Close

End With

Set objStream = NoThing

´´输出保存是否成功信息

If Err.Number=0 then

Response.Write("<font style=""font-size:12px;color:green;"">"&Now()&" AutoSave success!</font>")

Else

Response.Write("<font style=""font-size:12px;color:red;"">"&Now()&" Auto-Save failed,errorNo:"&Err.Number&",error message:"&Err.Dscription&"</font>")

End If

End IF

End IF

%>

=====以下代码存成ajaxrequest.js=====

function AJAXRequest() {

var xmlObj = false;

var CBfunc,ObjSelf;

ObjSelf=this;

try { xmlObj=new XMLHttpRequest; }

catch(e) {

try { xmlObj=new ActiveXObject("MSXML2.XMLHTTP"); }

catch(e2) {

try { xmlObj=new ActiveXObject("Microsoft.XMLHTTP"); }

catch(e3) { xmlObj=false; }

}

}

if (!xmlObj) return false;

this.method="POST";

this.url;

this.async=true;

this.content="";

this.callback=function(cbobj) {return;}

this.send=function() {

if(!this.method||!this.url||!this.async) return false;

xmlObj.open (this.method, this.url, this.async);

if(this.method=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

xmlObj.onreadystatechange=function() {

if(xmlObj.readyState==4) {

if(xmlObj.status==200) {

ObjSelf.callback(xmlObj);

}

}

}

if(this.method=="POST") xmlObj.send(this.content);

else xmlObj.send(null);

}

}

经验证,其中恢复草稿可能会有乱码问题,本人尚未彻底解决,只能直接调用打开autosave.txt来获得草稿。其他的留待大家解决吧。。。有结果的别忘告诉我。。。

  
邮箱: 密码:
  • (2011-05-26 11:09:47)
    这主题首页太拉风了。 
    • 阿和 博主 (2011-05-26 12:15:27)
      您的头像也很拉风。。。[hanx] 
  • ?断竹挽风?` (2011-05-25 23:00:06)
    不是,代码白痴路过…… 这家伙很懒
    • 阿和 博主 (2011-05-26 08:48:33)
      再狡辩就没意思了。。。 
  • ?断竹挽风?` (2011-05-25 22:59:42)
    白痴路过…… 这家伙很懒
    • 阿和 博主 (2011-05-26 08:30:24)
      这个。。。自己都承认了。。。 
  • 木本無心 (2011-05-24 14:21:24)
    这个很实用,要试试哦。 想什么么?
    • 阿和 博主 (2011-05-24 18:05:38)
      哈哈,是啊,以前写日志的时候都怕没掉,就在QQ邮箱里写,现在就不用啦。 
  • Lvtu 才高八斗 (2011-05-23 10:58:50)
    要不不折腾一折腾起来没完没了...... 得之,我幸;失之,我命。如是而已!
    • 阿和 博主 (2011-05-23 12:36:51)
      。。。让评论来得更猛烈些吧,哈哈。