javascript
跨域请求之JSONP
跨域懇求的方法有很多種,
1,iframe
2,document.domain
3,window.name
4,script
5,XDomainRequest (IE8+)
6,XMLHTTPRequest (Firefox3.5+)
7,postMessage (HTML5)
8,后臺代理
...
它們有各自的優缺點,回來的數據格局也各不同,應根據需要慎重挑選。比方iframe回來html片段就對比適合,費老勁用它回來JSON就因小失大了。這篇開端我將打造一個有用的跨域懇求東西Sjax。運用script懇求的最大缺點,挑戰是過錯處理。比方404過錯,它不象XMLHTTPRequest能精確的回來狀況碼404。我把這個放在最終一篇。
本系列首要描繪以上列舉的方法4,即通過script回來JSON格局數據數據。這種方法如今稱為JSONP。JSON是目前前后臺交流運用最盛行,也最廣泛的格局之一。相對于前期的AJAX回來XML(AJAX中的X即是XML),JSON顯得更輕量級,沒有剩余的Tag符號,解析也是原生的。XML回來到前端后先轉成文檔,通過DOM API一層層的解析。解析DOM是開支對比大的,尤其在前期的IE版別中(IE6/7/8),core js與dom交流的價值是很大的。
JSONP的實現思路很簡單
1, 前端創立script符號,設置src,添加到head中(你可以往body中添加)。
2, 后臺回來一個js變量jsonp,這個jsonp即是懇求后的JSON數據。
3, 回調完成后刪去script符號(還有一些整理作業如防止有些瀏覽器內存泄露等)。
接口
Sjax.load(
? ? url,// 跨過懇求的URL
? ? success, // 回調函數,有必要界說一個形參,用于接納后臺回來的全局變量jsonp (約好后臺回來如jsonp = {...}結構)
? ? timestamp,// 傳true會加一個時間戳,防止緩存,默許不加
);
? ? <!DOCTYPE HTML>
<html>?
<head>?
? ? <meta charset="utf-8">?
? ? <title>sjax_0.1.js by snandy</title>
? ? <script src="/js/sjax_0.1.js"></script>
</head>?
<body>
<p id="p1" style="background:gold;"></p>
<input type="button" value="Get Name" οnclick="clk()"/>
<script type="text/javascript">
? ? function clk(){
? ? ? ? Sjax.load(
? ? ? ? ? ? 'http://lf.yunnanw.cn/',?
? ? ? ? ? ? 'http://www.lcsyt.com/',?
? ? ? ? ? ? 'http://www.minnan888.net/',?
? ? ? ? ? ? 'http://www.vipfuxin.com/',?
? ? ? ? ? ? 'http://www.qclchina.com/',?
? ? ? ? ? ? 'http://www.tongxinglong.com/',?
? ? ? ? ? ? 'http://www.jinanwuliangye.com/',?
? ? ? ? ? ? '',?
? ? ? ? ? ? function(){
? ? ? ? ? ? ? ? document.getElementById('p1').innerHTML = 'Hi, ' + jsonp.name;
? ? ? ? ? ? }
? ? ? ? ); ? ? ?
? ? }
</script>
</body>
</html>
? ??
轉載于:https://blog.51cto.com/8917152/1426950
總結
以上是生活随笔為你收集整理的跨域请求之JSONP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift 简单语句 控制流语句
- 下一篇: 深入理解DIP、IoC、DI以及IoC容