• 通过原生js的ajax或jquery的ajax获取服务器的时间


    在实际的业务逻辑中,经常是与时间相关的,而前端能获得的时间有两个:客户端的时间,服务器的时间.

    客户端时间通过 javascript中的Date对象可以获取,如

    Java代码  收藏代码
    1. var dt = new Date();  
    2. var tm = dt.getTime();  



    那么tm就是客户端的时间,另外也可以通过对应的getFullYear(),getMonth(),getDate()取到对应的年月日等...
    但这个时间可靠吗?

    好吧,那取服务器时间吧
    经常用到的是后台写一个php,jsp,cgi,asp...通过这些程序来返回一个时间,这是一种解决方案,但仅仅一个时间点,有必要用程序后台程序来实现吗?

    那还有什么解决方案吗?
    PS:在生成页面的时候把服务器时间就写在里边,然后就可以直接用了.但如果只是一个静态页面了呢,能这么干吗?

    好吧,我在这里提出我的解决方案: Ajax HTTP Head

    原理:
    一般服务器在发送静态页面的时候(apache, nginx, lighttpd就目前所知)都是会在 HTTP 头里带一个Date的头信息的,那么我用Ajax直接取头信息里的Date不就OK了吗!8) 

    PS:但ajax发请求出去不是会有正文返回吗,那正文的内容比请求一次动态页面的代价可高多了,是这样的吗?8) 

    实现:

    Java代码  收藏代码
    1. var xhr = new XMLHttpRequest();  
    2. if( !xhr ){  
    3.    xhr = new ActiveXObject("Microsoft.XMLHTTP");  
    4. }  
    5. xhr.open("HEAD",location.href,true);  
    6. xhr.onreadystatechange=function(){  
    7.     if( xhr.readyState == 4 && xhr.status == 200 ){  
    8.          alert(xhr.getResponseHeader("Date"));  
    9.     }  
    10. }  
    11. xhr.send(null);  





    解释:
    常见的Ajax请求方法为GET,POST而这两种请求都可能会返回正文体,而发HEAD头则只会返回对应的头信息,不会有正文,且只要javascript可以执行,就可以取当前域的地址作为请求地址,有一定的通用性,且避免了跨域的问题.:lol: 


    实践:

    以上代码的完整版在ie6,7,8,9,opera,chrome,firefox下测试通过


    适用范围:

    javascript正常执行的作用域是http/https下生效



    其他:
    服务器一定会返回Date头信息吗?
    这个是RFC里要求服务器必须实现的,只有在101,103,500等几个状态码的情况下服务器才可以不返回Date头.但我们的location.href不在这个情况之列,所以只要当前javascript代码能正常执行(http方式),那么这个时间就可以取得到

    定制的服务器不在本文讨论范围之内




    转载请保留以下内容:
    author:mooring
    sites: http://mooring.iteye.com
    date:2012/02/23

    ------------------------------

    1. jquery封装的ajax方法获取web服务器时间

    var t = $.ajax({type:'HEAD', async:'false'}).getResponseHeader('date'); //同步请求

    2.chrome强烈不建议在主线程发同步的ajax请求,异步的写法如下:

    var t;

    $.ajax({type:'HEAD', async: true})

     .success(function(data, status, xhr){

       t=xhr.getResponseHeader('Date');

     });

  • 相关阅读:
    enote笔记语言(3)(ver0.4)
    enote笔记语言(3)(ver0.3)
    enote笔记语言(2)(ver0.5)
    enote笔记法的思考
    【原创精品】程序员最强大的利器——电子笔记本的思考(1)(ver0.3)
    enote笔记法(2)——why的使用
    enote笔记语言(5)——其他(ver0.2)
    enote笔记语言(2)(ver0.4)
    电子笔记本的思考(1)(ver0.2)
    APP——自动化——python——app测试概念和工具——背诵总结
  • 原文地址:https://www.cnblogs.com/stephenykk/p/3753578.html
Copyright © 2020-2023  润新知