轉ajax跨域的原理:
1.原因:瀏覽器的同源策略
2.Script可以避開同源策略檢查。jsonp就利用了這樣的原理。
jsonp主要是利用了 <script/> 標籤對 javascript 文檔的動態解析來實現。(其實也可以用eval函數)
來個超簡單的例子:
Html代碼
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head>
- <title>Test Jsonp</title>
- <script type="text/javascript">
- function jsonpCallback(result)
- {
- alert(result.msg);
- }
- </script>
- <script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback"></script>
- </head>
- <body>
- </body>
- </html>
其中 jsonCallback 是用戶端註冊的,擷取跨網域服務器上的json資料後,回調的函數。
http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback
這個 url 是跨網域服務器取 json 資料的介面,參數為回呼函數的名字,返回的格式為
Js代碼
- jsonpCallback({msg:'this is json data'})
Jsonp原理:
首先在用戶端註冊一個callback, 然後把callback的名字傳給伺服器。
此時,伺服器先產生 json 資料。
然後以 javascript 文法的方式,產生一個function , function 名字就是傳遞上來的參數 jsonp.
最後將 json 資料直接以入參的方式,放置到 function 中,這樣就產生了一段 js 文法的文檔,返回給用戶端。
用戶端瀏覽器,解析script標籤,並執行返回的 javascript 文檔,此時資料作為參數,傳入到了用戶端預先定義好的 callback 函數裡.(動態執行回呼函數)
附,其它跨域的方式:iframe等。http://blog.csdn.net/coldy456/article/details/5982712