html-demo

Build Status CircleCI npm version build status code coverage npm downloads gitter chat

Browser Support

Chrome Firefox Safari Opera Edge IE
Latest ✔ Latest ✔ Latest ✔ Latest ✔ Latest ✔ 8+ ✔
One Two Three Four Five Six
Span <td colspan=3>triple <td colspan=2>double          

Browser Matrix

模块 功能点 功能介绍
界面 UI支持 UI源码开放
  闪光灯 可切换不同状态闪光灯
  自定义分辨率及质量 支持不同质量分辨率输出
  自定义帧率 支持采集视频帧数设置
  自定义拍摄时长 可根据需求设置不同拍摄时长
  多比例拍摄 支持全屏、1:1、3:4比例拍摄

ECMAScript

跨域请求时候 option 请求

html-css-js代码格式化

webpagemodule

一些模板页面和效果

jQuery File Upload Example
 
 ---
 

- 我们在做移动web应用的时候,常常习惯于使用position:fixed把一个input框作为提问或者搜索框固定在页面底部。但在IOS的safari和webview中,对position:fixed的支持不是很好(在IOS5之前甚至还不支持position:fixed)。我遇到的其中一个问题就是,在iOS6+环境下,input focus弹出输入法的时候,设置了position fixed的input框浮在页面上了,而不是吸附在软键盘上。效果如图(图片来源于网上):


- 而Android则完全没这个问题,唉。那么我们只能针对IOS作兼容处理了。网上搜索了一通都没能找到比较适合的解决方案(不打算用iScroll),无奈只得自己想办法解决。琢磨良久后想到个折衷的办法:用position:absolute以及通过js动态移动输入框的位置来模拟position:fixed的效果,同时给window对象绑定一个滚动事件,让input框往下移动的时候,能时刻紧贴着软键盘。

- 于是问题来了,这个移动的位置应该是多少呢?

- 对图片作像素级分析+debug得知,输入框是被居中了。也就是说,输入框到窗口顶部的距离等于它到软键盘顶部的距离。不难算出,这个距离为 $('input').offset().top - $(window).scrollTop()。于是后面的问题就迎刃而解了。需要说明的是,兼容后的效果肯定比不上原生的position:fixed,但相比浮在页面来说还是要好不少吧。

- 基于zepto的主要代码实现如下:

$(‘input’).focus(function(){ var _this = this;

    //无键盘时输入框到浏览器窗口顶部距离
    var noInputViewHeight = $(window).height() - $(_this).height();

    //网页正文内容高度
    var contentHeight = $(document).height() - $(_this).height();

    //控制正文内容高度大于一屏,保证输入框固定底部
    contentHeight = contentHeight > noInputViewHeight ? contentHeight : noInputViewHeight;

    //因为弹出输入法需要时间,需延时处理
    setTimeout(function(){

            //弹出输入法时滚动条的起始滚动距离
            var startScrollY = $(window).scrollTop();

            //弹出输入法时输入框到窗口顶部的距离,即到软键盘顶部的起始距离
            var inputTopHeight = $(_this).offset().top - startScrollY;

            //弹出输入法时输入框预期位置,即紧贴软键盘时的位置。因输入框此时处于居中状态,所以其到窗口顶部距离即为需往下移动的距离。
            var inputTopPos = $(_this).offset().top + inputTopHeight;

            //控制div不超出正文范围
            inputTopPos = inputTopPos > contentHeight ? contentHeight : inputTopPos;

            //设置输入框位置使其紧贴输入框
            $(_this).css({'position':'absolute', 'top':inputTopPos });

            //给窗口对象绑定滚动事件,保证页面滚动时div能吸附软键盘
            $(window).bind('scroll', function(){

                    //表示此时有软键盘存在,输入框浮在页面上了
                    if (inputTopHeight != noInputViewHeight) {

                            //页面滑动后,输入框需跟随移动的距离
                            var offset = $(this).scrollTop() - startScrollY;

                            //输入框移动后位置
                            afterScrollTopPos = inputTopPos + offset;

                            //设置输入框位置使其紧贴输入框
                            $(_this).css({'position':'absolute', 'top':afterScrollTopPos });
                    }
            });
    }, 100); }).blur(function(){//输入框失焦后还原初始状态
    $(".div-input").removeAttr('style');
    $(window).unbind('scroll'); });

- 注: 以上代码在IOS6&7 safari中测试通过,IOS5及之前的版本没做测试。Android因为完美支持position:fixed则无需考虑此兼容方法。

## 对象,数组 字符串转换

1: 对象转化为数组:

  var arr = [ ];
  for ( var i in data ){
   var str = i + “=“ + data[ i ]// i 就代表 data 里面的 user pass 等等 而data[ i ] 就代表 userName 12121 就是 i 所对应的值;   arr.push( str );
  }   这样就会得到 arr = [ user = userName, pass = 12121 ];
    2:数组转化为字符串:
     两种方法:
    1:arr.join( “&”)//意思是用&f符代替“ , ”然后把数组变成字符串连接;
这时候 arr 里面的内容就是 user = tangcaiye&pass = 12121     2: 比如:
      var arr = [1,2];
      var str = JSON.stringify(arr);//这样也能转化为字符串但现在还是数组的形式不过类型已经是字符串了;
      var arr2 = JSON.parse(str);//这样就是把字符串解析 其实就是把外面的中括号去掉;

    前后台交互的:
    后台接收的时候只能接收字符串类型的;
    如果前台要传递一个数组就必须先把数组进行stringify( )的操作再进行传递;
    而后台返回给前台的也是字符串简称json串;这时需要解析一下就需要 JSON.parse( );操作完了再用;

 3:字符串转化为数组:
     例如:
  有个这样的 : url = “login.php?user=“+user.value+”&pass=“+pass.value;

  那我想要得到login.php就是这样写:var urlArr = url.split(“?”);

  上面那个意思就是以?为分割点把这个字符串劈开变成一个数组的两部分;

  那么 aa = urlArr[0];此时 aa 就等于 login.php;
  bb = urlArr[1];此时bb 就等于 后面那一坨


## 火狐和ie和谷歌浏览器 在new Date().toLocaleString(),返回结果差异:

火狐:
new Date().toLocaleString()
"2017/5/15 下午5:48:01"

ie edge
"2017年5月15日 17:49:29"

谷歌
"2017-5-15 17:50:57"
    
* jquery中prop()方法和attr()方法的区别浅析
  - 1.添加属性名称该属性就会生效应该使用prop(); ...
  - 2.是有true,false两个属性使用prop(); ...
  - 3.其他则使用attr();
     
## 开源协议


- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别  
 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别  

- 以下是上述协议的简单介绍:  
 BSD开源协议  
 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。  

 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:  

 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

 BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业 集 成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。  

- Apache Licence 2.0  
 Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:  

 需要给代码的用户一份Apache Licence
 如果你修改了代码,需要再被修改的文件中说明。
 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

 Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。  

- GPL  

 我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。  
 
 GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。  

 由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

 其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。    

- LGPL  
 LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

 但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

 GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

- MIT  
 MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

- MPL    
 MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)。但是,相比而言MPL还有以下几个显著的不同之处:  

 ◆ MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL 许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL 许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个豁口。  
 ◆ MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。  
 ◆ 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
 ◆ 对源代码的定义
 而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
 ◆ MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。

>>>


## 获取指定cookie方法

 function getCookie(name){
              var strCookie=document.cookie;
              var arrCookie=strCookie.split("; ");
              for(var i=0;i<arrCookie.length;i++){
                    var arr=arrCookie[i].split("=");
                    if(arr[0]==name)return arr[1];
              }
              return "";
 } ```

…………………………………

浏览器通知

1.传统做法

     var titleInit = document.title, isShine = true;

     setInterval(function() {
         var title = document.title;
         if (isShine == true) {
             if (/新/.test(title) == false) {
                 document.title = '【你有新消息】';    
             } else {
                 document.title = '【     】';
             }
         } else {
             document.title = titleInit;
         }
     }, 500);

     window.onfocus = function() {
         isShine = false;
     };
     window.onblur = function() {
         isShine = true;
     };

     // for IE
     document.onfocusin = function() {
         isShine = false;
     };
     document.onfocusout = function() {
         isShine = true;
     };

2.使用HTML5 Notification API开启浏览器桌面提醒

window.addEventListener("load", function(){
    if(Notification && Notification.permission !== "granted"){
        Notification.requestPermission(function(status){
            if(Notification.permission !== status){
                Notification.permission = status;
            }
        });
    }
    var button = document.getElementsByTagName("button")[0];
    button.addEventListener("click", function(){
        var t = new Date().toLocaleString();
        var options={
            dir: "ltr",
            lang: "utf-8",
            icon: "http://ihuster.com/static/avatar/m_default.png",
            body: "你好呀,欢迎留言交流呀"
        };
        if(Notification && Notification.permission === "granted"){
            var n = new Notification("HUSTecho: "+ t, options);    
            n.onshow = function(){
                console.log("You got me!");
            };
            n.onclick = function() {
                alert("You clicked me!");
                window.location = "/";
            };
            n.onclose = function(){
                console.log("notification closed!");
            };        
            n.onerror = function() {
                console.log("An error accured");
            }            
        }else if(Notification && Notification.permission !== "denied") {
            Notification.requestPermission(function(status){
                if(Notification.permission !== status){
                    Notification.permission = status;
                }

                if(status === "granted"){
                    for(var i = 0; i < 3; i++){
                        var n = new Notification("Hi! " + i, {
                            tag: "Beyoung",
                            icon: "http://ihuster.com/static/avatar/b_default.png",
                            body: "你好呀,我是第" + i +"条消息啦!"
                        });
                    }
                }
            });
        }else{
            alert("Hi!");
        }
    });
});

html email template

所有的CSS规则,最好都采用行内样式。因为放置在网页头部的样式,很可能会被客户端删除。客户端对CSS规则的支持情况,请看

email CSS规则

Design Resources

Free Pictures

TODO

图片在一个div中水平垂直居中 画框

除了使用flex布局和table;

1、方法追加一个和img平级的内容,display:line-block;vertical-align:middle;
<style>
    *{
        margin: 0px;
        padding: 0px;
    }
    body{
        box-sizing: border-box;
        line-height: 1;
    }
    div{
        margin: 0;
        padding: 0;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
        font-weight: 400;
        font-family: Microsoft YaHei,微软雅黑,Arial,sans-serif;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        line-height: 1;
    }
    div{
        font-family: PingFangSC,FZLTXHK,arial,Hiragino Sans GB,Microsoft YaHei,WenQuanYi Micro Hei,sans-serif;
}
    }
    img{
        border: 0;
    }
    img{
        border: none;
    }
    .handle-img{
        padding: 0px;
        text-align: center;
        color: #3e3e3e;
        width: 1070px;
        height: 525px;
        margin: 0 auto;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
        font-weight: 400;
        font-family: Microsoft YaHei,微软雅黑,Arial,sans-serif;
        -webkit-box-sizing: border-box;
        box-sizing: border-box;
        line-height: 1;
    }
    .handle-img .img-box{
        zoom: 1;
        width: 500px;
        height: 500px;
        margin: 0px auto;
        background-color: #e4e4e4;
        text-align: center;
        position: relative;
        overflow: hidden;
    }
    .handle-img .img-box .span-i {
        clear: both;
        content: ".";
        display: block;
        height: 0;
        visibility: hidden;
        overflow: hidden;
    }
    .handle-img .img-box #face-img{
        max-width: 100%;
        max-height: 100%;
        display: inline-block;
        vertical-align: middle;
        border:none;
    }
    .drawFaceBorder{
        position: absolute;
        left: 50%;
        top: 50%;
        z-index: 20;
    }
    .landmarkBox {
        position: absolute;
        outline: 2px solid #4aabe8;
        z-index: 100;
    }
    .handle-img .img-box .span-i{
        content: "";
        width: 1px;
        height: 100%;
        margin-right: -1px;
        display: inline-block;
        vertical-align: middle;
    }
</style>
<div class="handle-img">
    <div class="img-box">
        <img id="face-img" alt="demo" src="images/f-dd1.jpg"/><i class='span-i'></i>
        <div class="drawFaceBorder" style="position: absolute;width:500px; height:272px; top:50%; left:50%; margin-left:-250px; margin-top:-136px;">
            <div class="landmarkBox" style="transform: rotateZ(-9.522574deg); width:49.50045413260672px; height:49.50045413260672px; left:368.30154405086284px; top:123.97820163487738px;"></div>
            <div class="landmarkBox" style="transform: rotateZ(28.714148deg); width:46.32152588555858px; height:46.32152588555858px; left:201.6348773841962px; top:37.23887375113533px;"></div>
            <div class="landmarkBox" style="transform: rotateZ(11.734463deg); width:39.963669391462304px; height:39.963669391462304px; left:244.77747502270662px; top:147.59309718437783px;"></div>
        </div>
    </div>
</div>

2、绝对定位

.f-result {
        width: 1101px;
        margin: 0 auto;
        text-align: center;
        border: 1px solid #ccc;
        clear: both;
    }
    #f-result-img {
        position: relative;
        height: 600px;
        text-align: center;
    }
    #f-result-img .f-result-imgre {
        max-width: 1101px;
        max-height: 600px;
        position: absolute;
        margin-left: -174px;
        margin-top: -224.5px;
        top: 50%;
        left: 50%;
    }
    #f-result-mark {
        position: absolute;
    }
    .face-wrap {
        position: absolute;
        left: 101px;
        top: 59px;
        width: 120px;
        height: 121px;
    }
    .face-tect {
        border: 4px dashed #ee1918;
        height: 100%;
        left: -4px;
        position: relative;
        top: -4px;
        width: 100%;
    }
    
    <div class="f-result">
        <div id="f-result-img">
            <img class="f-result-imgre" alt=" " src="data:image/jpeg;base64,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" style="/* margin-left: -174px; *//* margin-top: -224.5px; *//* top: 50%; *//* left: 50%; */">
            <div id="f-result-mark" style="width: 348px; height: 449px; margin-left: -174px; margin-top: -224.5px; top: 50%; left: 50%;">
                <div class="face-wrap" style="left:101px;top:59px;width:120px;height:121px">
                    <div style="transform:rotate(-6deg);-ms-transform:rotate(-6deg);-moz-transform:rotate(-6deg);-webkit-transform:rotate(-6deg);-o-transform:rotate(-6deg);" class="face-tect"></div>
                </div>
            </div>
        </div>
    </div>

input[file]标签的accept=”image/*”属性响应很慢的解决办法

<inputtype="file"accept="image/gif,image/jpeg,image/jpg,image/png,image/svg">

每次更新浏览器缓存问题

解决 HTML 元素换行导致的编辑器空白问题

一般发生在 inline-block 元素上,

   <ul><li>Item content</li><li>Item content</li><li>Item content</li></ul>

   ul {font-size: 0;}

Safari 3D变换会忽略z-index问题解决

方法1:
父级,任意父级,非body级别,设置overflow:hidden可恢复和其他浏览器一样的渲染。

方法2:

我们的红色条子在z轴位置0处,对不对,所以才从图片的中心穿过。而z轴是我们眼睛看屏幕这条轴,在z轴的值越大,就离用户的眼睛越近;值越小,里用户眼睛越小。所谓近大远小(如果指定了视角perspective),就是这么回事。
所以,我们要想让红色条子覆盖在图片上,只要设置一个足够大的translateZ值就可以,如100px:
transform: translateZ(100px)

原文:by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=5569

设置边框渐变

border: 2px double #00c5f4;
border-image: -webkit-linear-gradient(left top,#01d6da,#506ee6) 2 stretch;
border-image: -moz-linear-gradient(left top,#01d6da,#506ee6) 2 stretch;
border-image: -o-linear-gradient(left top,#01d6da,#506ee6) 2 stretch;
border-image: -ms-linear-gradient(left top,#01d6da,#506ee6) 2 stretch;
border-image: linear-gradient(left top,#01d6da,#506ee6) 2 stretch;
width: 960px;
height: 954px;
border-top: 0;

设置子元素中 input 只读属性

document.getElementsByClassName('el-date-editor')[0].children[1].setAttribute('readonly','true');

对html5 video 原生控件的控制

在Chrome的控制台打开Show user agent shadow DOM查看Chrome隐藏的代码:

打开Chrome控制台(F12)->Settings(F1) -> Preferences -> Elements -> Show user agent shadow DOM

勾上Show user agent shadow DOM。

video::-internal-media-controls-download-button {
    display:none;
}

video::-webkit-media-controls-enclosure {
    overflow:hidden;
}

video::-webkit-media-controls-panel {
    width: calc(100% + 30px); /* Adjust as needed */
}


<video muted duration preload controls oncontextmenu="return false;" controlsList="fullscreen nodownload">

清除浮动

1、 clear:both;
2、 overflow: hidden; 父级div定义 overflow:hidden
    原理: BFC (Block Formatting Context)全称是块级格式化上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级     元素 设置了float:left,overflow:hidden或position:absolute样式,就会为这个块级元素生成一个独立的块圾上下文,就像在window全局作用域内,声明了     一个function就会生成 一个独立的作用域一样,新开僻的BFC像是开僻了一个新的小宇宙,使这个块圾元素内部的排版完全独立隔绝。
    独立的块级上下文可以包裹浮动流,全部浮动子元素也不会引起容器高度塌陷,也就是说包含块会把浮动元素的高度也计算在内,所以不用清除浮动来撑起高度。
    
    该方法清楚浮动的本意
    overflow:hidden的意思是超出部分去掉,如果父元素height为auto,内部元素浮动,势必会将内部元素全部隐藏,故计算出内部浮动高度顺便清除浮动。
    
    如何触发BFC

    根元素
    loat的值不为none
    overflow的值不为visible
    display的值为inline-block、table-cell、table-caption
    position的值为absolute或fixed
    display:table也认为可以生成BFC,其实这里的主要原因在于Table会默认生成一个匿名的table-cell,正是这个匿名的table-ccell生成了BFC
    
    
3、

什么是FOUC(文档样式短暂失效)?

   如果使用import方法对CSS进行导入,会导致某些页面在Windows 下的Internet Explorer出现一些奇怪的现象:以无样式显示页面内容的瞬间闪烁,这种现象称之为文    档样式短暂失效(Flash of Unstyled Content),简称为FOUC。
  原因大致为:
   1,使用import方法导入样式表。
   2,将样式表放在页面底部
   3,有几个样式表,放在html结构的不同位置。
    其实原理很清楚:当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花    屏现象。
   解决方法:
  使用LINK标签将样式表放在文档HEAD中。
  

数据缓存问题

 //不缓存数据方法
 (function ($) {
     $.ajaxSetup({ cache: false });
 })(jQuery);//这样每次请求都会带一个时间戳,相当于不同的请求,也就是禁用ajax缓存