跨域JSONP原理及呼叫具體示例
阿新 • • 發佈:2018-12-22
上篇部落格介紹了同源策略和跨域訪問概念,其中提到跨域常用的基本方式:JSONP和CORS。
那這篇部落格就介紹JSONP方式。
JSONP原理
在同源策略下,在某個伺服器下的頁面是無法獲取到該伺服器以外的資料的,但img、iframe、script等標籤是個例外,這些標籤可以通過src屬性請求到其他伺服器上的資料。
而JSONP就是通過script節點src呼叫跨域的請求。
當我們通過JSONP模式請求跨域資源時,伺服器返回給客戶端一段javascript程式碼,這段javascript程式碼自動呼叫客戶端回撥函式。
舉個例子
客戶端http://localhost:8080訪問伺服器http://localhost:11111/user,正常情況下,這是不允許的。因為這兩個URL是不同域的。
若我們使用JSONP格式傳送請求的話?
http://localhost:11111/user?callback=callbackfunction
則伺服器返回的資料如下:
callbackfunction({"id":1,"name":"test"})
仔細看看伺服器返回的資料,其實就是一段javascript程式碼,這就是函式名(引數)格式。
伺服器返回後,則自動執行callbackfunction函式。
因此,客戶端需要callbackfunction函式,以便使用JSONP模式返回javascript程式碼後自動執行其回撥函式。
注意:其中url地址中的callback和callbackfunction是隨意命名的。
具體的JS實現JSONP程式碼。
JS中: