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 09 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
php之curl设置超时实例
Nov 03 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
简单实现php上传文件功能
Sep 21 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
php实现文章评论系统
Feb 18 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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中通过fopen()函数访问远程文件示例
2014/11/18 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php cookie 详解使用实例
2016/11/03 PHP
validator验证控件使用代码
2010/11/23 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
自我鉴定模板
2013/10/29 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
篮球比赛口号
2014/06/10 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
银行实习推荐信
2015/03/27 职场文书
行政上诉状范文
2015/05/23 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python