手寫一個jsonp實現
JSONP是JSON with padding(填充式JSON或引數式JSON)的簡寫,是應用JSON的一種新方法,在後來的Web服務中非常流行。JSONP看起來與JSON差不多,只不過是被包含在函式呼叫中的JSON,就像下面這樣。
callback({ “name”: “Nicholas” });
JSONP由兩部分組成:回撥函式和資料。回撥函式是當響應到來時應該在頁面中呼叫的函式。回撥函式的名字一般是在請求中指定的。而資料就是傳入回撥函式中的JSON資料。下面是一個典型的JSONP請求。
http://freegeoip.net/json/?callback=handleResponse
這個URL是在請求一個JSONP地理定位服務。通過查詢字串來指定JSONP服務的回撥引數是很常見的,就像上面的URL所示,這裡指定的回撥函式的名字叫handleResponse() 。
JSONP是通過動態 <script> 元素來使用的,使用時可以為 src 屬性指定一個跨域URL。這裡的 <script> 元素與 <img> 元素類似,都有能力不受限制地從其他域載入資源。因為JSONP是有效的JavaScript程式碼,所以在請求完成後,即在JSONP響應載入到頁面中以後,就會立即執行。來看一個例子。
function handleResponse(response){
alert(“You’re at IP address ” + response.ip + ”, which is in ” + response.city + ”, ” + response.region_name);
}
var script = document.createElement(“script”);
script.src = “http://freegeoip.net/json/?callback=handleResponse”;
document.body.insertBefore(script, document.body.firstChild);
這個例子通過查詢地理定位服務來顯示你的IP地址和位置資訊。
JSONP之所以在開發人員中極為流行,主要原因是它非常簡單易用。與影象Ping相比,它的優點在於能夠直接訪問響應文字,支援在瀏覽器與伺服器之間雙向通訊。不過,JSONP也有不足。
首先,JSONP是從其他域中載入程式碼執行。如果其他域不安全,很可能會在響應中夾帶一些惡意程式碼,而此時除了完全放棄JSONP呼叫之外,沒有辦法追究。因此在使用不是你自己運維的Web服務時,一定得保證它安全可靠。
相關文章
- 一道面試題,手寫原生ajax和jsonp面試題JSON
- 手寫系列-實現一個鉑金段位的 ReactReact
- [手寫系列] 帶你實現一個簡單的PromisePromise
- 面試題目:手寫一個LRU演算法實現面試題演算法
- 手寫一個HTTP框架:兩個類實現基本的IoC功能HTTP框架
- 寫了一個 FastCGI 實現AST
- 動手實現一個localcache - 實現篇
- 一步一步實現手寫PromisePromise
- 手寫一個PromisePromise
- 動手實現一個 LRU cache
- 如何實現一個手帳 AppAPP
- jsonp的原理與實現JSON
- 原生JavaScript實現AJAX、JSONPJavaScriptJSON
- 動手實現一個JavaScript的AOP(一)JavaScript
- 手動實現一個promise(原始碼)Promise原始碼
- 自己動手實現一個前端路由前端路由
- 自己動手實現一個EventBus框架框架
- 自己動手實現一個Unix Shell
- 手寫AOP實現過程
- 手寫IOC實現過程
- android 利用path 實現手寫板的手寫效果Android
- JSONP 跨域原理及實現JSON跨域
- JavaScript中模擬實現jsonpJavaScriptJSON
- 用 class 寫法完整實現一個 PromisePromise
- 手寫一個解析器
- 從頭手寫一個PromisePromise
- 手寫一個LRU工具類
- 手寫一個自己的PromisePromise
- 手寫一個 React 動畫元件React動畫元件
- 手寫一個vue-routerVue
- 自己動手寫一個 SimpleVueVue
- 手寫一個自定義PromisePromise
- 自己動手實現一個阻塞佇列佇列
- 動手實現一個localcache - 設計篇
- 手動實現一個JS執行引擎JS
- 如何用JavaScript手動實現一個棧JavaScript
- 動手實現一個簡單的promisePromise
- 練手專案,實現一個web框架Web框架