在JavaScript中,有一個很重要的安全性限制,被稱爲「Same-Origin Policy」(同源策略) 這一策略對於JavaScript代碼可以訪問的頁面內容作了很重要的限制,即JavaScript只能訪問與包含它的文檔在同一域下的內容javascript
當咱們必須進行跨域請求時 利用在頁面中建立<script>節點的方法向不一樣域提交HTTP請求的方法稱爲JSONP,這項技術能夠解決跨域提交Ajax請求的問題 假設在http://example1.com/index.php這個頁面中向http://example2.com/getinfo.php提交GET請求,咱們能夠將下面的JavaScript代碼放在http://example1.com/index.php這個頁面中來實現: php
var eleScript= document.createElement("script"); eleScript.type = "text/javascript"; eleScript.src = "http://example2.com/getinfo.php"; document.getElementsByTagName("HEAD")[0].appendChild(eleScript);
當GET請求從http://example2.com/getinfo.php返回時,能夠返回一段JavaScript代碼,這段代碼會自動執行,能夠用來負責調用http://example1.com/index.php頁面中的一個callback函數java
JSONP它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種狀況,不能解決不一樣域的兩個頁面之間如何進行JavaScript調用的問題。jquery
JSONP的最基本的原理是:動態添加一個<script>標籤的方法向不一樣域提交HTTP請求ajax
JsonP的執行過程: json
首先在客戶端註冊一個callback (如:'jsoncallback') 而後把callback的名字(如:jsonp1236827957501)傳給服務器 而後以 javascript 語法的方式,生成一個function, function 名字就是傳遞上來的參數 'jsoncallback'的值 jsonp1236827957501 . 最後將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端 跨域
客戶端瀏覽器 解析script標籤 執行返回的javascript文檔 此時javascript 文檔數據 做爲參數 傳入到了客戶端預先定義好的 callback 函數(如上例中jquery $.ajax()方法封裝的的success: function (json))裏瀏覽器
簡述原理與過程:首先在客戶端註冊一個callback, 而後把callback的名字傳給服務器。此時,服務器先生成 json 數據。 而後以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數 jsonp。最後將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。
客戶端瀏覽器,解析script標籤,並執行返回的 javascript 文檔,此時數據做爲參數,傳入到了客戶端預先定義好的 callback 函數裏。(動態執行回調函數)安全