国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

Ajax請求利用jsonp實現跨域

2024-04-27 15:02:54
字體:
來源:轉載
供稿:網友

跨域: js有一個同源限制,簡單說來源不一樣的話就無法相互間交互.那么怎么算來源不一樣呢, 舉個例子:瀏覽器訪問-->服務器A--->得到頁面A---頁面A中的js腳本只能訪問服務器A的資源(相同域名和端口,此外域名與對應的ip也算不同源,要么都域名,要么都ip).

以上就是js的跨域問題,但是這里需要注意一點的是服務器A是沒有跨域的問題的,這個只有js存在這個問題,也就是說: 頁面A中js-->服務器A--->跨域資源,這個路徑是可以.只有 頁面A中的js--->跨域資源,這個路徑是不行的.

然后說一下解決方案中的jsonp,這個不是一種格式,而是一種解決方案.

jsonp的原理:js雖然有同源限制,但是引入js文件的時候卻沒有這個限制,也就是說:

<script type="text/javascript" src="xxx/xxxx.js"></script>

其中src屬性引入js文件的時候是沒有同源限制的,此時是可以引入域外資源的.jsonp的原理就在這里,通過動態的創建一個以上那行js引入語句,通過其src屬性訪問域外資源.而域外資源服務器只要返回一個能被解析為js語句的字符串即可達到返回結果的目的,形如:

callback({"key":"value",...})  

其中callback是需要事先約定的名字,綠字部分為要返回到json字符串,然后拼接成以上那種形式直接返回即可.這樣頁面中的js從服務端接收到這個拼接的字符串后,就會直接執行本地的名為callback的js方法,這也就是為何callback這個需要事先約定的原因,需要保證頁面側要存在這個js方法,這個方法傳入的參數就為服務器側的返回值.

Ajax是支持jsonp的,所以以上那些麻煩事情都會替我們做,寫法如下:

$.ajax({          type: 'GET',          url: "http://127.0.0.1:8080/xxx/xxx",          async: false,          dataType: "jsonp",          jsonp: "callback",          success: function(result){              .....          },          timeout:3000      });

紅字部分標識我們使用jsonp的方式調用,實際上此時這個已經不是傳統意義上的ajax的get請求了,它的真實實現方式就是我們上文中說的那樣.其中紅字部分的callback為我們要和服務器端進行溝通的部分,這個請求發送到服務器端,實際上這樣的:

http://127.0.0.1:8080/xxx/xxx?callback=jqueryxxxx

服務器端需要通過callback來取值(類似用request.getParameter("callback")),也就是取后面的jqueryxxxx等自動生成的值,這個值實際上就是對應的我們發送請求的ajax方法中的success回調方法,服務器端如果返回

jqueryxxxx({"ret":"ok"})

頁面中會自動執行success方法,且將{"ret":"ok"}傳給success方法的參數result.

以上就是ajax通過jsonp的方式實現跨域訪問的過程.可以看出基本不用我們做什么額外操作,全都封裝好了.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 綦江县| 广安市| 彰化市| 紫金县| 沁阳市| 前郭尔| 金华市| 昭平县| 瓦房店市| 格尔木市| 邳州市| 无为县| 北票市| 英德市| 利辛县| 吴忠市| 遂川县| 沈阳市| 鲜城| 鲁甸县| 阳春市| 黄龙县| 新野县| 广河县| 桐乡市| 泰和县| 祁东县| 西吉县| 徐水县| 新邵县| 栖霞市| 新干县| 沛县| 右玉县| 聂拉木县| 金堂县| 唐海县| 南平市| 汝城县| 兴宁市| 开江县|