JS的jsonp是什麼?5分鐘學會jsonp跨域請求
一、jsonp是什麼?
jsonp是解決跨域請求的一種技術。瀏覽器為了防止CSRF攻擊會採用同源策略(協議/主機/埠均相同)限制,對非同源發起http請求(即跨域請求)會被瀏覽器阻止。
二、jsonp跨域請求的原理?
script標籤的src屬性不受同源策略限制,用此方式對非同源伺服器請求資源,返回的JS程式碼會呼叫指定的函式,攜帶的引數就是所需的資料,這樣就完成了跨域請求。
三、原生JS的jsonp跨域請求:
首先宣告一個處理返回資料的函式,返回的JS程式碼會呼叫此函式:
function dosomething(data) { console.log(data) }
然後建立script標籤新增到頁面,src設為請求地址,請求地址的引數規定了返回的函式名:
<script src="http://example.com/data.php?callback=dosomething"></script>
最後服務端會返回一段JS程式碼,它會呼叫指定的函式,攜帶的引數就是所需的資料,至此跨域請求就完成了。
dosomething({name:"逐逸"});
四、jQuery的jsonp跨域請求:
這裡的success就跟上面的dosomething一樣。
$.ajax({ url: "http://example.com/data.php", type: "GET", dataType: "jsonp", //指定伺服器返回的資料型別 success: function(data) { console.log(data) } });
五、jsonp的優點與缺點:
優點:它不被同源策略限制,而且相容性更好,在古董瀏覽器中都可以執行。
缺點:它只支援 GET 請求,而不支援 POST 等其他型別的 HTTP 請求。