為什麼jsonp只能使用get請求,是因為get的一些原因,還是post的某些原因,還是一些別的原因,我查文檔說是'這是由於該技術本身的特性所決定的' 請問這種本身的特性是指的什麼,能不能具體的說明一下。萬分感謝!
PHP中文网2017-06-12 09:30:42
JSONP 是一種
【請求一段 JS 腳本,把執行這段腳本的結果當作資料】
的玩法。
所以,你能 POST 一段透過 script 標籤引入的腳本嗎?
(如果看過 JSONP 函式庫的原始碼就知道,常見的實作程式碼其實就是 document.createElement('script')
產生一個 script 標籤,然後插 body 裡而已。這裡根本沒有設定請求格式的餘地)。
世界只因有你2017-06-12 09:30:42
域名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) {}
})
背後其實在進行:
拼接一個script標籤,,從而觸發對指定位址的GET請求
那伺服器端對這個GET請求進行處理,並回傳字串 "myCallback('response value')"
那前端script載入完之後,其實就是在script中執行myCallback('response value')
是不是就完成了跨域的請求,
是不是就是只能用GET
给我你的怀抱2017-06-12 09:30:42
假設你要求的地址傳回這麼個網頁.
<!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的.
代言2017-06-12 09:30:42
因為