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 相关文章推荐
洪恩在线成语词典小偷程序php版
Apr 20 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 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
substr()函数中文版
2006/10/09 PHP
PHP获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
隐藏你的.php文件的实现方法
2007/03/19 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
详解vuex的简单使用
2018/03/12 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
Python基于回溯法子集树模板解决m着色问题示例
2017/09/07 Python
python中正则表达式的使用方法
2018/02/25 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
Python脚本调试工具安装过程
2021/01/11 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
美术课外活动总结
2014/07/08 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
商务英语求职信范文
2015/03/19 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
2015年话务员工作总结
2015/04/29 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers