当前位置:  编程技术>WEB前端
本页文章导读:
    ▪Javascript跨域请求的几种解决方法      什么情况下才会出现跨域?假设域名是:http://www.example.com.cn/如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的。&nbs.........
    ▪JS实现:获取客户端网卡MAC地址和IP地址            在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证。要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻.........
    ▪ajax的IE cache issue      运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因。 function verify() {        $.ajax({         .........

[1]Javascript跨域请求的几种解决方法
    来源:    发布时间: 2013-11-06
什么情况下才会出现跨域?
假设域名是:http://www.example.com.cn/
如果所请求的域名跟这个域名不致,这种情况就是跨域,由于跨域存在漏洞,所以一般来说正常的跨域请求方式是请求不到的。
 
解决方式:
一、window.name
    1、 服务器返回
 
<script>window.name='{"id":"3", "name":"leisure"}';</script>
    2、定义一个iframe,添加onload事件 <iframe id="iframe1" onload="iLoad"><iframe>
    <script type="text/javascript">
        var load = false;
            function iLoad() {
                if(load == false) {
                    // 同域处理,请求后会再次重新加载iframe
                    document.getElementById('iframe1').contentWindow.location = '/';         
                    load = true;
                } else {
                    // 获取window.name的内容,注意必须进行同域处理后方可访问!
                    var data = document.getElementById('iframe1').contentWindow.name;
                    alert(data);  // {"id":"3", "name":"leisure"}
                    load = false;
                }
        }
    </script>
    3、定义一个form,设置form的target为iframe的id,然后提交form
    <form  action="/blog_article/url/index.html" method="POST" target="iframe1">
          <button type="submit" value="submit" />
    </form>
 
 
二、JSONP
    服务器返回 callback({"id": "3", "name": "leisure"});
    <script type="text/javascript">
        function callback(data) {
            alert(data);
        }
    </script>
    <script type="text/javascript" src="http://www.example.com.cn/product.jsp?id=5&jsonp=callback"></script>
 
三、jQuery.getJSON
    服务器返回 json格式数据 test({"id": "3", "name": "leisure"}); test函数名为callback参数中定义
    $.getJSON(url + "?callback=?", data, function(data) {
 
    }
    注意callback=?这个参数必须带上,jquery会自动生成一个函数名替换这个问号!jQuery.getJSON实际上是用了JSONP方式实现。
 
四、flash跨域
    服务器添加crossdomain.xml
    http://www.example.com.cn/crossdomain.xml
    <?xml version="1.0"?>
    <cross-domain-policy>
        <allow-access-from domain="*.another.com.cn" />
    </cross-domain-policy>

本文链接


    
[2]JS实现:获取客户端网卡MAC地址和IP地址
    来源:    发布时间: 2013-11-06

      在做B/S结构的系统时,我们常常需要获取客户端的一些信息,如IP和MAC,以结合身份验证。要获取服务器端的MAC很容易,但是要获取客户端的MAC的地址确要花费一翻心思,通常的做法是调用Win32API或直接调用nbtstat命令,这样做有很多问题,而另一种方法就是直接用客户端脚本,我们这里用Javascript,这样做的好处是不需要服务器端进行处理,有客户端自行获取,传递到服务器端,且速度和可靠性都比在服务器端获取好。  
       具体实现的html和javascript如下:  
   
   
  <HTML>

<HEAD>

<TITLE>WMI   Scripting   HTML</TITLE>  
    <META   http-equiv=Content-Type   content="text/html;   charset=gb2312">  
    <SCRIPT   language=JScript   event="OnCompleted(hResult,pErrorObject,   pAsyncContext)"   for=foo>  
    document.forms[0].txtMACAddr.value=unescape(MACAddr);  
    document.forms[0].txtIPAddr.value=unescape(IPAddr);  
    document.forms[0].txtDNSName.value=unescape(sDNSName);  
    //document.formbar.submit();  
    </SCRIPT>  
   
  <SCRIPT   language=JScript   event=OnObjectReady(objObject,objAsyncContext)   for=foo>  
        if(objObject.IPEnabled   !=   null   &&   objObject.IPEnabled   !=   "undefined"   &&   objObject.IPEnabled   ==   true)  
        {  
             if(objObject.MACAddress   !=   null   &&   objObject.MACAddress   !=   "undefined")  
                    MACAddr   =   objObject.MACAddress;  
             if(objObject.IPEnabled   &&   objObject.IPAddress(0)   !=   null   &&   objObject.IPAddress(0)   !=   "undefined")  
                    IPAddr   =   objObject.IPAddress(0);  
             if(objObject.DNSHostName   !=   null   &&   objObject.DNSHostName   !=   "undefined")  
                    sDNSName   =   objObject.DNSHostName;  
          }  
      </SCRIPT>  
   
  <META   content="MSHTML   6.00.2800.1106"   name=GENERATOR></HEAD>  
  <BODY>  
  <OBJECT   id=locator   classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6   VIEWASTEXT></OBJECT>  
  <OBJECT   id=foo   classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>  
  <SCRIPT   language=JScript>  
        var   service   =   locator.ConnectServer();  
        var   MACAddr   ;  
        var   IPAddr   ;  
        var   DomainAddr;  
        var   sDNSName;  
        service.Security_.ImpersonationLevel=3;  
        service.InstancesOfAsync(foo,   'Win32_NetworkAdapterConfiguration');  
        </SCRIPT>  
   
  <FORM   id=formfoo  name=formbar  method=post>

<INPUT   type="text"   name=txtMACAddr>

<INPUT   type="text"  name=txtIPAddr>

<INPUT   type="text"  name=txtDNSName>

</FORM>

</BODY>

</HTML>  

 其实最关键的还是用到两个ActiveX:  
                  <OBJECT   id=locator   classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6   VIEWASTEXT></OBJECT>  
                  <OBJECT   id=foo   classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>  
                  不过这两个ActiveX都是系统自带,不用去下载或注册。  
                  接下来的工作就是用脚本和ActiveX交互,脚本可以是js或Vbs都可以.

本文链接


    
[3]ajax的IE cache issue
    来源: 互联网  发布时间: 2013-11-06

运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因。

function verify() {   
    $.ajax({   
        //issue for IE cache; timestamp=" + new Date().getTime()
        url:"checkGroupName?timestamp=" + new Date().getTime(),     
        async: true,
        data:"groupName=" + $("#cn").val()+"&groupTypeForDetail="+$("#groupType").val()+"&prefix="+$("#p").val(),
        dataType:"html",   
        success:function(data){  
         if(data==1){
             $("#result").html("<font color='green'>Group name["+$("#p").val()+ $("#cn").val()+"]Valid</font>");
             $("#email").val($("#p").val()+ $("#cn").val()+$("#emailHidden").val());
             $('#subData').removeAttr("disabled");
         }else if(data==2){
             $("#result").html("<font color='red'>Group name["+$("#p").val()+ $("#cn").val()+ "]already existed.</font>");
             $('#subData').attr('disabled',"true");
         }else{
             $("#result").html("<font color='red'>Group name can not be empty.</font>");
             $('#subData').attr('disabled',"true");
         }
        }   
    });        
}

原理:

Firefox 每次 request 都会重新再回一次 server 取得最新的数据,但是 IE 就不一样了,它会 cache 住之前得到的数据,只有第一次 request 时会真正的去 server 读取数据,导致ajax数据不会随时间而更新….

解决方案(从网上收集的):

  1、在服务端加 header("Cache-Control: no-cache, must-revalidate"); 或者用下面的组合更好一些:

               header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");

               header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
               header("cache-Control: no-cache, must-revalidate");
               header("Pragma: no-cache");  

  2、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");

  3、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");

  4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了

  5、第四种方法和第三种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); //推荐使用这种方式,我用的就是这种,个人认为比较方便。

  6、用POST替代GET:不推荐


作者:shenhonglei1234 发表于2013-3-14 16:24:08 原文链接
阅读:0 评论:0 查看评论

    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3