# JSONP是什么?
JSON For Padding JSON的補充。其實本質和JSON沒有半毛錢關系。使用script標簽。它是變通的一種解決方案。
# 使用JSONP服務器代碼需要改動嗎?
答案是:不改動,別想成功。
# JSONP的實現原理
與普通XHR請求不同的地方有:
1. 請求的Type
請求的type類型是script,不是xhr
2. response的Content-Type
響應的數據不是json對象,而是一段js腳本。也就是response的Content-Type是application/javascript,不是application/json
3. URL
JSONP的URL后面自動加入了一長串參數,其中有一個參數是callback=XXX,這個callback的值就是將來接口返回的JS腳本的函數名。也就是JS腳本其實就是對XXX函數的調用,而真正的JSON數據被當做函數的參數被傳回
```
$.ajax({
url: 'api/getUser.do',
dataType: 'jsonp', // 響應的數據類型是jsonp形式
jsonp: 'callback', // 指定jsonp前后端約定的回調函數的名稱,默認是callback
success: function (json) {
}
})
```
# JSONP有什么弊端?
- 服務器需要改動代碼來支持
- 只支持GET 因為底層是script的src,所以只能是GET
- 發送的不是XHR請求 XHR會有異步、事件等眾多特性