_Ajax编程_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

AJAX跨域访问出现\&am#039;没有权限\&am#039;的错误

作者:黑客防线网安Ajax教程基地 来源:黑客防线网安Ajax教程基地 浏览次数:0

本篇关键词:权限错误没有出现

很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误这是XMLHTTP组件的限制-安全起见禁止访问非同域的网站,下面一个例子来访问http://www.google.cn,

<script type="text/javascript"> function createobj() {  if (window.ActiveXObject) {           return new ActiveXObject("Microsoft.XMLHTTP");       }       else if (window.XMLHttpRequest) {           return new XMLHttpRequest();       }  }   function getWebPage(url) {    var oBao=createobj();    var my_url=url    oBao.open('get',my_url,false);     oBao.onreadystatechange=function(){         if(oBao.readyState==4){              if(oBao.status=<script type="text/javascript"> function createobj() {  if (window.ActiveXObject) {           return new ActiveXObject("Microsoft.XMLHTTP");       }       else if (window.XMLHttpRequest) {           return new XMLHttpRequest();       }  }   function getWebPage(url) {    var oBao=createobj();    var my_url=url    oBao.open('get',my_url,false);     oBao.onreadystatechange=function(){         if(oBao.readyState==4){              if(oBao.status==200){                var returnStr=oBao.responseText;                document.write(returnStr);              }else{                document.write("未找到您输入的地址或服务器505错误!");              }         }    }    oBao.send(null);   }  getWebPage('http://www.google.cn');  </script> =200){                var returnStr=oBao.responseText;                document.write(returnStr);              }else{                document.write("未找到您输入的地址或服务器505错误!");              }         }    }    oBao.send(null);   }  getWebPage('http://www.google.cn');  </script> 保存这段代码到test.html,在本地直接用IE打开没问题,但将该段代码上传到服务器后问题出现了--JS提示"没有权限"错误!!!这该如何解决呢?

下面思考一下:既然不能访问非同域的,只能访问同域的地址了,同域的动态文件怎么获取非同域网页内容呢?我们还是想到的AJAX,只不过这个AJAX是在服务器端执行.

大体思路是这样的:首先将URL用AJAX提交给自己站内的文件,例如getPage.asp---在getPage.asp再次通过服务器XMLHTTP来访问提交来的URL---将获取的内容返回给提交URL的页----显示内容

下面开始组织代码,首先是test.html文件

<script type="text/javascript"> function createobj() {  if (window.ActiveXObject) {           return new ActiveXObject("Microsoft.XMLHTTP");       }       else if (window.XMLHttpRequest) {           return new XMLHttpRequest();       }  }   function getWebPage(url) {    var oBao=createobj();    var my_url="getpage.asp?url="+escape(url);    oBao.open('get',my_url,false);     oBao.onreadystatechange=function(){         if(oBao.readyState==4){              if(oBao.status==200){                var returnStr=oBao.responseText;                document.write(returnStr);              }else{                document.write("未找到您输入的地址或服务器505错误!");              }         }    }    oBao.send(null);   }  getWebPage('http://www.google.cn');  </script>  再就是getpage.asp文件(注意:要以UTF-8格式保存本文件,防止乱码),如下:    <%  response.charset="UTF-8" reg="\<meta.+ charset= {0,}([^\"" \>\/]*).+\/{0,1}\>" '函数名:GetResStr  '作用:获取指定URL的HTML代码  '参数:URL-要获取的URL  function GetResStr(URL)  err.clear  dim ResBody,ResStr,PageCode,ReturnStr  Set Http=createobject("MiCROSOFT.XMLHTTP")   Http.open "GET",URL,False   Http.Send()   If Http.Readystate =4 Then     If Http.status=200 Then      ResStr=http.responseText      ResBody=http.responseBody      PageCode=GetCode(ResStr,reg)      ReturnStr=BytesToBstr(http.responseBody,PageCode)      GetResStr=ReturnStr   End If   End If   End Function   '函数名:BytesToBstr  '作用:转换二进制数据为字符  '参数:Body-二进制数据,Cset-文本编码方式  Function BytesToBstr(Body,Cset)     Dim Objstream     Set Objstream = CreateObject("adodb.stream")     objstream.Type = 1     objstream.Mode =3     objstream.Open     objstream.Write body     objstream.Position = 0     objstream.Type = 2     objstream.Charset =Cset     BytesToBstr = objstream.ReadText     objstream.Close     set objstream = nothing   End Function   '函数名:GetCode  '作用:转换二进制为字符  '参数:str-待查询字符串,regstr-正则表达式  Function GetCode(str,regstr)  Dim Reg,serStr  set Reg= new RegExp  Reg.IgnoreCase = True Reg.MultiLine = True Reg.Pattern =regstr if Reg.test(str) then '若查询到匹配项     Set Cols = Reg.Execute(str)     serStr=Cols(0).SubMatches(0) '使用匹配到的第一个匹配项  else '否则给个默认值gb2312,有点省懒法,如果页面没给出编码格式,想知道确实有点麻烦     serStr="gb2312" end if  GetCode=serStr end function   dim url:url=request.querystring("url")  response.write GetResStr(URL)  %> 代码组织完毕,实验下,成功提取http://www.google.cn的内容!!!!!这样就可以解决"没有权限"的问题了 其实,单纯一个getpage.asp一样能获�还荒芟駄s那样动态的处理DOM。

还有一个问题,如果你用第一种方法访问http://www.baidu.com会出现乱码,因为baidu编码为GB2312,而XMLHTTP返回的是UTF-8编码格式。用第二种方法就不会出现这样的问题了,只要定义了编码格式的站点就能正常返回信息(这里不能包括一些使用特别编码的站点)。


    希望这篇AJAX跨域访问出现&am#039;没有权限&am#039;的错误的文章能够对您有所帮助,如果您觉得这篇网站维护教程有用的话,别忘了推荐给您的朋友哦!如果您有好的经验方法,不妨拿出来和大家一起分享:假如每个人都拿出一个经验,那么我们都将额外的获取一堆他人的经验。
请记住本站永久域名:(黑客防线网安服务器维护方案维护基地)Www.Rongsen.Com.Cn
    黑客防线网安服务器维护方案本篇连接:http://shop.rongsen.com.cn/show-15687-1.html
网站维护教程更新时间:2012-04-05 00:05:32  【打印此页】  【关闭
0
顶一下
0
踩一下
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer