對於開發人員來說,離不開API的開發和呼叫,我們在日常開發中,如果呼叫了第三方的API,而且此第三方API是以json資料格式返回時,預設是無法直接呼叫的(比如AJAX方式呼叫),因為會涉及到跨域問題。如何解決JSON跨域呼叫呢?那就得用到JSONP!
最簡單的理解:JSON是一種資料格式,而JSONP是一種資料呼叫的方式。還有一種不嚴謹的理解:帶callback的JSON是JSONP。
由於瀏覽器的同源策略,a.com上網頁是無法和b.com伺服器直接溝通的,JSONP就是用來解決瀏覽器跨域資料訪問的。
上面說到了,所有主流瀏覽器出於安全因素考慮都有同源策略,而HTML中的<script>標籤則不受此限制(<script>標籤沒有跨域限制)!所以我們可以利用這個特性來和第三方進行資料通訊。
JSONP整個工作流程大概如下:
1、呼叫方頁面上使用script標籤引用第三方API地址;
2、第三方響應的資料是JSON資料的包裝,格式如下:
3、這樣一來,瀏覽器請求了此API後獲取到的實際上是一段JS程式碼,然後呼叫callback函式,函式的實參是JSON物件,我們可以在callback函式中進行資料處理。
對於開發人員來說,離不開API的開發和呼叫,我們在日常開發中,如果呼叫了第三方的API,而且此第三方API是以json資料格式返回時,預設是無法直接呼叫的(比如AJAX方式呼叫),因為會涉及到跨域問題。如何解決JSON跨域呼叫呢?那就得用到JSONP!
JSON和JSONP的區別最簡單的理解:JSON是一種資料格式,而JSONP是一種資料呼叫的方式。還有一種不嚴謹的理解:帶callback的JSON是JSONP。
由於瀏覽器的同源策略,a.com上網頁是無法和b.com伺服器直接溝通的,JSONP就是用來解決瀏覽器跨域資料訪問的。
JSONP的原理分析上面說到了,所有主流瀏覽器出於安全因素考慮都有同源策略,而HTML中的<script>標籤則不受此限制(<script>標籤沒有跨域限制)!所以我們可以利用這個特性來和第三方進行資料通訊。
JSONP整個工作流程大概如下:
1、呼叫方頁面上使用script標籤引用第三方API地址;
2、第三方響應的資料是JSON資料的包裝,格式如下:
callback({"name":"susan","age":"22"})3、這樣一來,瀏覽器請求了此API後獲取到的實際上是一段JS程式碼,然後呼叫callback函式,函式的實參是JSON物件,我們可以在callback函式中進行資料處理。