之前一直以為ajax是不能跨域的,從來也沒嘗試過。今天體驗了一下ajax跨域請求數據,分享一樣。
公司做了一個純靜態HTML的網站,可是公司領導說讓加公告,因為我們的后台管理系統和靜態頁面在不同的服務器上,不同的域名,而HTML服務器也沒有PHP環境,這就需要兩個域之間的數據交換。討論了下各種的實現方式,淘汰了iframe,后來用script加載技術。具體如下:
<script src="http://www.baidu.com"></script>
這個實現方法有一個局限性,如果需要傳遞參數怎么辦?例如:http://localhost/test/index.php?id=3
首先這是一個HTML純靜態的頁面,只能用JS來獲取get參數。
JS獲取get參數,去網上搜了下,代碼如下:
var url=document.URL; var para=''; if(url.lastIndexOf("?")>0) { para=url.substring(url.lastIndexOf("?")+1,url.length); var arr=para.split("&"); para=""; for(var i=0;i<arr.length;i++) { para = arr[i].split("=")[1]; } //para 為第一個參數的值 }
獲取了參數的值,拼裝成我們要加載的鏈接,這樣貌似就可以實現我們的功能了。
其實則不然。我們實現的方法在於用javascript加載遠程鏈接。但是在加載之前我們需要獲得參數的值來確定鏈接(例:http://localhost/test/index.php?id=3),但是瀏覽器的工作機制是先加載完HTML才開始運行JS的腳本,前后順序矛盾,所以這種實現辦法宣告失敗!
記得之前做過一個項目,類似於獲取新浪股票的數據,然后實時顯示。這個就用到了ajax的跨域。
后來去網上搜了一下,發現JQuery對於Ajax的跨域請求有兩類解決方案,不過都是只支持get方式。分別是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式。(http://www.open-open.com/lib/view/open1334026513327.html)
新浪股票獲取方式就是用到script的方式。
$.ajax({ url:"http://localhost/index.php?id="+para, dataType:"script", cache:"false", type:"GET", success:function(a){ $("#title").html(announce_title); $("#date").html(announce_date); $("#content").html(announce_content); } });
而http://localhost/index.php?id=3打印出來是這種格式的
var announce_title="mytitle"; var announce_date="2013-04-17 13:36:15"; var announce_content="this is a test";
所以在遠程只要輸出上面這樣的數據格式,就可以實現html和系統間的數據交換了。
又漲姿勢了。