javascript
JSONProxy - 获取跨域json数据工具
JSONProxy是一款很好的獲取json數(shù)據(jù)的代理網(wǎng)站,“Enables cross-domain requests to?any?JSON API”。當你苦于無法跨域獲取json數(shù)據(jù)時,不妨一試,說不定能事半功倍。
比如這位朋友,想通過ajax獲取必應(yīng)的每日一圖的url(是否可以通過ajax獲取“Bing每日一圖”?)很顯然,這個ajax是跨域的,直接獲取會因為跨域報錯;服務(wù)端也肯定不會有對你本地localhost的“Access-Control-Allow-Origin”的設(shè)置,所以CORS策略也是不行的;因為是個json數(shù)據(jù),沒有方法名包裹,所以jsonp也是不行。樓主暫時還沒接觸過其他的跨域方法,如果要我去獲取url,只能通過服務(wù)端的代碼,服務(wù)端去獲取json數(shù)據(jù),然后index頁面去ajax請求服務(wù)端獲取的json數(shù)據(jù)(此時index頁面和服務(wù)端同源),代碼量增加,而要做的僅僅只是獲取一個json數(shù)據(jù)啊!這時JSONProxy就幫你做好了服務(wù)端的工作,是不是很爽!
Easy: JSONP
原生的JavaScript:
<script>function myCallback(data){console.log(data);} </script> <script src="https://jsonp.afeld.me/?callback=myCallback&url=http://jsonview.com/example.json"></script>myCallback函數(shù)里的data就是返回的json數(shù)據(jù)了。很顯然,服務(wù)器會幫你去請求你需要的json數(shù)據(jù),然后包裹在你設(shè)置的回調(diào)函數(shù)名中,這時要注意的代碼中的紅色兩處要保持一致,url后跟的就是需要的json數(shù)據(jù)地址。
當然JQuery封裝好的方法更加簡單:
<script>$.getJSON('https://jsonp.afeld.me/?callback=?&url=http://jsonview.com/example.json', function(data){console.log(data);}); </script>Easier: Cross-domain AJAX (CORS)
比jsonp更簡單的方法是CORS(好吧,也沒簡單到哪去啊...)
<script>$.get('https://jsonp.afeld.me/?url=http://jsonview.com/example.json', function(data){console.log(data);}); </script>這回是真正地發(fā)送了ajax請求了,為什么跨域了還能請求?因為服務(wù)端設(shè)置好了。
而請求的json數(shù)據(jù)也是服務(wù)端幫你獲取的。也就是說,客戶端發(fā)送請求,服務(wù)端解析請求的url,然后服務(wù)器作為代理發(fā)送http請求去請求json數(shù)據(jù)(這時不存在客戶端跨域),再返回給客戶端作為回調(diào)的參數(shù)。
Easiest: jQuery Plugin
最簡單的,我怎么感覺越來越復(fù)雜了...
略...
總結(jié),因為要用第三方的服務(wù)器,所以既耗時又有不確定因素(比如服務(wù)器掛了),不合適用在真正項目中,自己玩玩尚可。
總結(jié)
以上是生活随笔為你收集整理的JSONProxy - 获取跨域json数据工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核社区是数字军火商、斯拉夫兵
- 下一篇: 利用FastJSON 把list和map