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 相关文章推荐
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
Linux系统下php获得系统分区信息的方法
Mar 30 PHP
PHP代码优化技巧小结
Sep 29 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
Feb 22 PHP
PHP 出现 http500 错误的解决方法
Mar 09 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 将excel导入mysql
2009/11/09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
php对称加密算法示例
2014/05/07 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php实现httpRequest的方法
2015/03/13 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
在Python中使用第三方模块的教程
2015/04/27 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
python实现动态数组的示例代码
2019/07/15 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
中国梦主题教育活动总结
2014/05/05 职场文书
出差报告怎么写
2014/11/06 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
MySQL索引是啥?不懂就问
2021/07/21 MySQL
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记