日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误

發(fā)布時間:2023/11/27 生活经验 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如何解決AJAX中跨域訪問出現(xiàn)'沒有權(quán)限'的錯誤

很多人在使用AJAX調(diào)用別人站點內(nèi)容的時候,JS會提示"沒有權(quán)限"錯誤,這是XMLHTTP組件的限制-安全起見

禁止訪問非同域的網(wǎng)站,下面一個例子來訪問http://www.,

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("未找到您輸入的地址或服務(wù)器505錯誤!");

}

}

}

oBao.send(null);

}

getWebPage('http://www.');

保存這段代碼到test.html,在本地直接用IE打開沒問題,但將該段代碼上傳到服務(wù)器后,問題出現(xiàn)了--JS提示"沒有權(quán)限"錯誤!!!這該如何解決呢?

下面思考一下:既然不能訪問非同域的,只能訪問同域的地址了,同域的動態(tài)文件怎么獲取非同域網(wǎng)頁內(nèi)容呢?我們還是想到的AJAX,只不過這個AJAX是在服務(wù)器端執(zhí)行.

大體思路是這樣的:首先將URL用AJAX提交給自己站內(nèi)的文件,例如getPage.asp---在getPage.asp再次通過服務(wù)器XMLHTTP來訪問提交來的URL---將獲取的內(nèi)容返回給提交URL的頁----顯示內(nèi)容

下面開始組織代碼,首先是test.html文件

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("未找到您輸入的地址或服務(wù)器505錯誤!");

}

}

}

oBao.send(null);

}

getWebPage('http://www.');

再就是getpage.asp文件(注意:要以UTF-8格式保存本文件,防止亂碼),如下:

response.charset="UTF-8"

reg="\\/]*).+\/{0,1}\>"

'函數(shù)名:GetResStr

'作用:獲取指定URL的HTML代碼

'參數(shù):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

'函數(shù)名:BytesToBstr

'作用:轉(zhuǎn)換二進(jìn)制數(shù)據(jù)為字符

'參數(shù):Body-二進(jìn)制數(shù)據(jù),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

'函數(shù)名:GetCode

'作用:轉(zhuǎn)換二進(jìn)制為字符

'參數(shù):str-待查詢字符串,regstr-正則表達(dá)式

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 '否則給個默認(rèn)值gb2312,有點省懶法,如果頁面沒給出編碼格式,想知道確實有點麻煩

serStr="gb2312"

end if

GetCode=serStr

end function

dim url:url=request.querystring("url")

response.write GetResStr(URL)

%>

代碼組織完畢,實驗下,成功提取http://www.的內(nèi)容!!!!!這樣就可以解決"沒有權(quán)限"的問題了。

其實,單純一個getpage.asp一樣能獲取,不過不能像js那樣動態(tài)的處理DOM。

還有一個問題,如果你用第一種方法訪問http://www.baidu.com會出現(xiàn)亂碼,因為baidu編碼為GB2312,

而XMLHTTP返回的是UTF-8編碼格式。用第二種方法就不會出現(xiàn)這樣的問題了,只要定義了編碼格式的站點就能正常返回信息(這里不能包括一些使用特別編碼的站點)。

總結(jié)

以上是生活随笔為你收集整理的ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。