活到老學到老學習AJAX跨域(三)
學習AJAX其實有個很重要的應用,就是為了執(zhí)行另外幾個站點的ASP,返回結果。
真正用起來,發(fā)現2個問題,一向做DELPHI,接觸ASP不多的我,的確問題大堆。
第一個問題:
VBS的變量傳遞給JS。。。通過學習發(fā)現很簡單的。。。
先看下我大體實現方法:
<% dim sSrv1Link sSrv1Link = "http://www.XXX.org/test1.asp?U=TESTUSER&M=111&E=222" %> <script type="text/javascript"> function synSvrData(str) { var xmlhttp; if (str.length==0) { document.getElementById("txtHint").innerHTML=""; return; } //創(chuàng)建對象 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } //處理ONREADYSTATECHANGE事件,我們這里只相應服務器反饋成功的 xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET",str,true); xmlhttp.send(); } </script>
上面這段代碼的意思就是用AJAX實現訪問一個ASP,并返回結果。
<script type="text/javascript"> var jsSvr='<%=sSrv1Link%>'; synSvrData(jsSvr) </script>
看到沒?這個才是關鍵:
var jsSvr='<%=sSrv1Link%>';
js使用VBS變量,為什么要這樣?因為加密串那些都是VBS生成的。
本地測試OK,現在把訪問文件換成其他服務器上的。。。
sSrv1Link = "http://www.XXX2.org/test1.asp?U=TESTUSER&M=111&E=222"
意思就是跨域?。?!
這時候問題來了。。。代碼執(zhí)行后無返回,后來發(fā)現不是不返回,是XXX2服務器不響應!
發(fā)現問題出現在 test1.asp 這個文件上?。?!對!你沒看錯!
跨域請求,顧名思義,就是一個站點中的資源去訪問另外一個不同域名站點上的資源。
以下兩端摘抄:
隨著 Web2.0 和 SNS 的興起,Web 應用對跨域訪問的需求也越來越多,但是,在腳本中進行跨域請求是受安全性限制的,Web 開發(fā)人員迫切需要提供一種更安全、方便的跨域請求方式來融合(Mashup)自己的 Web 應用。這樣做的一個好處就是可以將請求分攤到不同的服務器,減輕單個服務器壓力以提高響應速度;另外一個好處是可以將不同的業(yè)務邏輯分布到不同的服務器上以降低負載。
值得慶幸的是,跨域請求的標準已經出臺,主流瀏覽器也已經實現了這一標準。W3C 工作組中的 Web Applications Working Group(Web 應用工作組)發(fā)布了一個 Cross-Origin Resource Sharing(跨域資源共享,該規(guī)范地址:http://www.w3.org/TR/access-control/和http://dev.w3.org/2006/waf/access-control/) 推薦規(guī)范來解決跨域請求的問題。該規(guī)范提供了一種更安全的跨域數據交換方法。具體規(guī)范的介紹可以訪問上面提供的網站地址。值得注意的是:該規(guī)范只能應用在類似 XMLHttprequest 這樣的 API 容器內。IE8、Firefox 3.5 及其以后的版本、Chrome瀏覽器、Safari 4 等已經實現了 Cross-Origin Resource Sharing 規(guī)范,已經可以進行跨域請求了。Cross-Origin Resource Sharing 的工作方式是通過添加 HTTP 頭的方法來判斷哪些資源允許 Web 瀏覽器訪問該域名下的信息。然而,對于那些 HTTP 請求導致用戶數據產生副作用的請求方法(特別是對于除了GET、某些 MIME 類型的 POST 之外的 HTTP方法),該規(guī)范要求瀏覽器對請求進行“預先驗”,通過發(fā)送 HTTP 的 OPTIONS 請求頭詢問服務器有哪些支持的方法,在征得服務器的同意后,再使用實際的 HTTP 請求方法發(fā)送實際的請求。服務器也可以通知客戶端是否需要將驗證信息(如 Cookie 和 HTTP Authentication 數據)隨同請求一起發(fā)送。
看了這么多,其實實現一句話:就是添加HTTP頭!
先看看我們做測試用的原來的 test1.asp
<% sUser=request.QueryString("U") response.write("XXX.org: " & sUser) %>
下面添加跨域訪問:
<% response.AddHeader "Access-Control-Allow-Origin", "http://www.XXX2.org" sUser=request.QueryString("U") response.write("XXX2.org: " & sUser) %>
response.AddHeader "Access-Control-Allow-Origin", "http://www.XXX2.org"對了,就這么一句話,跨域完成了,你再測試下,是不是OK了?
相關文章
ajax、axios和fetch之間優(yōu)缺點重點對比總結
今天被問到用沒用過ajax axios,我回答經常用axios,但ajax用的比較少,下面這篇文章主要給大家介紹了關于ajax、axios和fetch之間優(yōu)缺點重點對比總結的相關資料,需要的朋友可以參考下2022-12-12如何解決Ajax的content-download時間過慢問題
這篇文章主要介紹了Ajax的content-download時間過慢問題的解決方法及思考過程,本文通過事件背景,過程分析,給大家介紹的非常詳細,需要的朋友參考下吧2018-04-04