您的位置:首页 > 理论基础 > 计算机网络

XMLHttpRequest对象扩展问题

2014-01-23 21:29 190 查看
之前的博客中给大家介绍了创建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对象的扩展问题的方法很多,大家可以查阅资料了解其他方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: