php+ajax实现文章自动保存的方法


Posted in PHP onDecember 30, 2014

本文实例讲述了php+ajax实现文章自动保存的方法。分享给大家供大家参考。具体分析如下:

php+ajax文章自动保存的方法主是要方便用户,提高用户体验,我们就是用ajax把数据保存一个临时数据,像csdn一样,他可以自动保存用户的数据,这样就是掉电,出现意外你编辑的数据都不人被丢失.

这是自动保存草稿的核心的一部分,

autosavetime(sec) 这个函数是用来开始计时的

clearTimeout(autosavetimer);清除定时器

document.getElementById('autosavetimebox').innerHTML=sec+"秒";取得页面中的autosavetimebox对像,并向其写入倒计时

if(sec>0) { 

       autosavetimer = setTimeout("autosavetime("+sec+"-1)",1000); 

     //这里就是如果当sec>0的时候,第一秒执行一次autosavetime这个函数,同时会把sec-1的值写入autosavetimebox中 

}else { 

          var title=document.getElementById('title'); 

          if(title.value!=''){ 

                                  autosave_post(); 

          }else{ 

                 document.getElementById('autosavetimebox').innerHTML='不用保存';    

          }

}

这一部分,就是当sec>0的条件不成立,呵呵,就是sec<=0的时候,开始执行保存草稿,首先会判断文章的标题是否为空,如果不会为空,就执行autosave_post()这个函数,否则就写入‘不用保存'.

php代码如下:

var userAgent = navigator.userAgent.toLowerCase(); 

var is_opera  = (userAgent.indexOf('opera') != -1); 

var is_saf    = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == 'Apple Computer, Inc.')); 

var is_webtv  = (userAgent.indexOf('webtv') != -1); 

var is_ie     = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv)); 

var is_ie4    = ((is_ie) && (userAgent.indexOf('msie 4.') != -1)); 

var is_moz    = ((navigator.product == 'Gecko') && (!is_saf)); 

var is_kon    = (userAgent.indexOf('konqueror') != -1); 

var is_ns     = ((userAgent.indexOf('compatible') == -1) && (userAgent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_saf)); 

var is_ns4    = ((is_ns) && (parseInt(navigator.appVersion) == 4)); 

var is_mac    = (userAgent.indexOf('mac') != -1); 

if ((is_ie & !is_ie4) || is_moz || is_saf || is_opera) 

{ 

    var allowajax=1; 

}else{ 

    var allowajax=0; 

} 

var xmlHttp = false; 

function makeSendData(postData,url,functionName,httptype) { 

 

var posturl=url; 

try { 

   xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 

} catch (e) { 

   try { 

     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 

   } catch (e2) { 

     xmlHttp = false; 

   } 

} 

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 

   xmlHttp = new XMLHttpRequest(); 

} 

 

if (!xmlHttp) { 

        alert('Cannot send an XMLHTTP request'); 

        return false; 

} 

 

// 提交表单的方式 

xmlHttp.open(httptype, posturl, true); 

 

// 当表单提交完成后触发一个事件 

var changefunc="xmlHttp.onreadystatechange = "+functionName;  ///////from bob 

eval (changefunc); 

xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  

xmlHttp.send(postData); 

} 

function autosave_post() 

{ 

    var title=document.getElementById('title').value; 

    var content = window.frames["Editor"].window.frames["HtmlEditor"].document.getElementsByTagName("BODY")[0].innerHTML; 

    var postTime=document.getElementById('postTime').value; 

    if(allowajax==1) 

    { 

        content=postencode(content); 

        title=postencode(title); 

        var post="title="+title+"&content="+content+"&postTime="+postTime+""; 

        var url="ajax.php?act=autosave"; 

        makeSendData(post,url,'autosave','POST'); 

    } 

} 

function autosave() 

{ 

    if(xmlHttp.readyState == 4) 

    { 

        if(xmlHttp.status == 200) 

        { 

            var autoresponse=xmlHttp.responseText; 

            var automessage=document.getElementById('autosavetimebox'); 

            if(autoresponse.indexOf("<autosave_error>")!=-1) 

            { 

                automessage.innerHTML='您还没有添写信息,不用保存草稿'; 

                return false; 

            } 

            if(autoresponse.indexOf("<autosave_ok>")!=-1) 

            { 

                automessage.innerHTML='保存成功,您可以在发生意外的时候载入草稿'; 

                finddraft(); 

            } 

        } 

    } 

} 

function finddraft() 

{ 

    if(allowajax==1) 

    { 

        var url="ajax.php?act=loaddraft"; 

        makeSendData(null,url,'loaddraft','POST'); 

    } 

} 

function loaddraft() 

{ 

    var draftbox=document.getElementById('draft'); 

    if(xmlHttp.readyState < 4) 

    { 

        draftbox.innerHTML='草稿载入中...'; 

    } 

    if(xmlHttp.readyState == 4) 

    { 

        if(xmlHttp.status == 200) 

        { 

            draftbox.innerHTML=xmlHttp.responseText; 

        } 

    } 

} 

function cleardraft() 

{ 

    if(allowajax==1) 

    { 

        var url="ajax.php?act=cleardraft"; 

        makeSendData(null,url,'nodraft','POST'); 

    } 

} 

function nodraft() 

{ 

    var draftbox=document.getElementById('draft'); 

    if(xmlHttp.readyState < 4) 

    { 

        draftbox.innerHTML='载入中...'; 

    } 

    if(xmlHttp.readyState == 4) 

    { 

        if(xmlHttp.status == 200) 

        { 

            draftbox.innerHTML=xmlHttp.responseText; 

        }

    } 

} 

//encode string 

function postencode (str) {  

    str=encodeURIComponent(str); 

    if (is_moz) str=str.replace(/%0A/g, "%0D%0A"); //from bob 

    return str; 

}

自动保存的js代码,代码如下:
var autosavetimer; 

function autosavetime(sec) { 

   clearTimeout(autosavetimer); 

   document.getElementById('autosavetimebox').innerHTML=sec+"秒"; 

   if(sec>0) { 

       autosavetimer = setTimeout("autosavetime("+sec+"-1)",1000); 

   }else { 

       var blogtitle=document.getElementById('title'); 

       if(blogtitle.value!=''){ 

           autosave_post(); 

       }else{ 

           document.getElementById('autosavetimebox').innerHTML='不用保存';   

       } 

   } 

} 

function startimer() 

{ 

    var starttime=document.getElementById('autosavetimebox').innerHTML; 

    if(starttime=='保存成功,您可以在发生意外的时候载入草稿' || starttime=='您还没有添写信息,不用保存草稿') 

    { 

        starttime='60'; 

    }else{ 

        starttime=starttime.replace('秒',''); 

    } 

    var autosavefunbox=document.getElementById('autosavefunbox'); 

    autosavefunbox.innerHTML='<a href="javascript教程:" onClick="javascript:stoptimer()">停止计时</a>'; 

    starttime==0 ? starttime=60 : starttime=starttime; 

    autosavetime(starttime); 

} 

function stoptimer() 

{ 

    var autosavefunbox=document.getElementById('autosavefunbox'); 

    autosavefunbox.innerHTML='<a href="javascript:" onClick="javascript:startimer()">开始计时</a>'; 

    clearTimeout(autosavetimer); 

}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP加密解密字符串汇总
Apr 26 PHP
详解PHP中的Traits
Jul 29 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
php实现监控varnish缓存服务器的状态
Dec 30 #PHP
php在线解压ZIP文件的方法
Dec 30 #PHP
php站内搜索关键词变亮的实现方法
Dec 30 #PHP
php使用PDO操作MySQL数据库实例
Dec 30 #PHP
discuz目录文件资料汇总
Dec 30 #PHP
浅谈php冒泡排序
Dec 30 #PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 #PHP
You might like
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
5种Python单例模式的实现方式
2016/01/14 Python
python结合API实现即时天气信息
2016/01/19 Python
简单实现python聊天程序
2018/04/01 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
如何用python免费看美剧
2020/08/11 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
运动会领导邀请函
2014/01/10 职场文书
网络信息安全承诺书
2014/03/26 职场文书
志愿者活动总结
2014/04/28 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
人民检察院起诉书
2015/05/20 职场文书
可可西里观后感
2015/06/08 职场文书
小学体育教学随笔
2015/08/14 职场文书
浅谈python中的多态
2021/06/15 Python