javascript - jsonp只能用get原因
阿神
阿神 2017-06-12 09:28:42
0
5
1264

為什麼jsonp只能使用get請求,是因為get的一些原因,還是post的某些原因,還是一些別的原因,我查文檔說是'這是由於該技術本身的特性所決定的' 請問這種本身的特性是指的什麼,能不能具體的說明一下。萬分感謝!

阿神
阿神

闭关修行中......

全部回覆(5)
Ty80

JSONP 是一種
【請求一段 JS 腳本,把執行這段腳本的結果當作資料】
的玩法。

所以,你能 POST 一段透過 script 標籤引入的腳本嗎?

(如果看過 JSONP 函式庫的原始碼就知道,常見的實作程式碼其實就是 document.createElement('script') 產生一個 script 標籤,然後插 body 裡而已。這裡根本沒有設定請求格式的餘地)。

世界只因有你

域名A中的JS代碼AJAX請求域名為B的伺服器數據,這就是跨域AJAX請求,預設情況下是不行的。

但是HTML中有地方可以跨域請求,例如img script標籤,它們的src屬性指向的位址可以是不在網域名稱下的(即跨域)。

那有人就利用了上面的特點,選擇了script中src能夠跨域獲得內容的特性,研究出了JSONP這種hack協議。 (src中請求都是GET)

那假設JSONP請求如下:

jsonp({
    url: 'http://path/to/server/b',
    params: {A: a, B: b},
    success: function myCallback (response) {}
})

背後其實在進行:

  1. 拼接一個script標籤,,從而觸發對指定位址的GET請求

  2. 那伺服器端對這個GET請求進行處理,並回傳字串 "myCallback('response value')"

  3. 那前端script載入完之後,其實就是在script中執行myCallback('response value')

  4. 是不是就完成了跨域的請求,

  5. 是不是就是只能用GET

黄舟

類似於給你的頁裡面動態加了一段js 程式碼,你覺得js檔案可以post嗎?

给我你的怀抱

假設你要求的地址傳回這麼個網頁.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="jquery.min.js"></script>
</head>
<body>
    
</body>
</html>

瀏覽器拿到這個網頁後要解析, 解析到

<script src="jquery.min.js"></script>

這一行程式碼的時候, 就知道這裡需要一個js檔, 於是再發起一個請求, 去拿這個js檔. 這個請求只能用GET方法, 不可能是POST, 就好像你在瀏覽器地址欄輸入地址回車進入一樣.

JSONP的實現原理就是創建一個script標籤, 再把需要請求的api地址放到src裡. 所以只能是GET的.

代言

因為

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板