AJAX跨域访问出现\'没有权限\'的错误

nicesamwong

nicesamwong

2016-02-19 19:20

下面请跟着图老师小编一起来了解下AJAX跨域访问出现\'没有权限\'的错误,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

很多人在使用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是在服务器端执行.

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

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一样能获取,不过不能像js那样动态的处理DOM。

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

展开更多 50%)
分享

猜你喜欢

AJAX跨域访问出现\'没有权限\'的错误

Web开发
AJAX跨域访问出现\'没有权限\'的错误

解析edikid\'s blog的CSS“加密”技术

Web开发
解析edikid\'s blog的CSS“加密”技术

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

AJAX javascript的跨域访问执行

Web开发
AJAX javascript的跨域访问执行

成功实现ajax xmlhttp跨域访问

Web开发
成功实现ajax xmlhttp跨域访问

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

成功实现ajax,xmlhttp跨域访问

Web开发
成功实现ajax,xmlhttp跨域访问

ajax跨域访问的解决方案

Web开发
ajax跨域访问的解决方案

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Windows 8 中如何设置双系统下默认启动系统

Windows 8 中如何设置双系统下默认启动系统

使一个新的MySQL安装更安全

使一个新的MySQL安装更安全
下拉加载更多内容 ↓