XMLHttpRequest对象扩展问题

  之前的博客中给大家介绍了创建XMLHttpRequest对象的方式和Get和Post的区别,今天介绍XMLHttpRequest对象扩展问题。

一、缓存

   XMLHttpRequest对象在使用时,第一是好的,刷新一下就不行了,清楚缓存再刷新就好了。

  原因:有时XMLHttpRequest请求的结果会缓存在同一个URL中

  解决方法:知道了原理后,就要清空缓存,让它每次请求的url不同,每次都去服务器请求,而不是使用缓存。

加时间戳

 

  function cache(){
                     if(window.XMLHttpRequest){
                         cachexmlhttp= new XMLHttpRequest();
                         if(cachexmlhttp.overrideMimeType){
                             cachexmlhttp.overrideMimeType("text/xml");
                         }
                     }else if (window.ActiveXObject){
                          var activexName = ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
                       for(var i= 0;i<activexName.length;i++){
                           try{
                               cachexmlhttp= new ActiveXObject(activexName[i]);
                               break;
                           }catch(e){}
                     }
                 }
                 if(cachexmlhttp == undefined || cachexmlhttp == null){
                     alert("当前浏览器不支持创建XMLHttpRequest对象,请更换浏览器");
                     return;
                 }
                 cachexmlhttp.onreadystatechange=function(){
                     if(cachexmlhttp.readyState == 4){
                         if(cachexmlhttp.status == 200){
                             var message=cachexmlhttp.responseText;
                             var div=document.getElementById("cachemessage");
                             div.innerHTML=message;
                         }
                     }
                 };
关键代码:
  var url="cache";
                 if(url.indexOf("?")>=0){
                     //url中存在参数信息
                     url = url + "&t=" + (new Date()).valueOf();
                 }else{
                     url = url + "?t=" + (new Date()).valueOf();
                 }
                 cachexmlhttp.open("GET",url,true);
                 cachexmlhttp.send(null);
             }

二、跨域

    web浏览器在网络连接的时候会强制执行一个安全限制,其中就包括调用XmlHttpRequest。此安全限制组织脚本或者应用程序连接任何其他的不是来自本域的web服务。如果web程序和程序使用的xml数据来自同一服务器就ok。

    

   但是如果访问了一个web服务器,而web服务器返回页面请求另一个服务器就会受到限制

    

解决方法:在web服务器上安装一个代理,可以通过调用web服务器的代理访问其他服务器。通过代理发去XMlHttpRequest请求,然后代理传递请求到web服务,并且返回客户端应用程序所需要的数据,因为所有数据来自你自己的服务器,所以浏览器不会受到限制

   

关键代码:

   if(url.indexOf("http//")== 0){
                       url.replace("?","&");
                       url="Proxy?url" + url;
                     
                   }

    解决XMLHttpRequest对象的扩展问题的方法很多,大家可以查阅资料了解其他方法。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值