亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

AJAX跨域請求獲取JSON數據的實現方法

瀏覽:16日期:2022-06-14 13:26:18
目錄jQuery 的 JSONP1. 什么是 JSONP2. JSONP有什么用MooTools JSONPDojo JSONP

Asynchronous JavaScript and XML (AJAX ) 是驅動新一代 Web 站點(流行術語為 Web 2.0 站點)的關鍵技術。Ajax 允許在不干擾 Web 應用程序的顯示和行為的情況下在后臺進行數據檢索。使用 XMLHttpRequest 函數獲取數據,它是一種 API,允許客戶端 JavaScript 通過 HTTP 連接到遠程服務器。Ajax 也是許多 mashup 的驅動力,它可將來自多個地方的內容集成為單一 Web 應用程序。

我們都知道,由于受到瀏覽器的限制,AJAX 是不允許跨域請求。不過可以通過使用 JSONP 來實現。JSONP 是一種通過腳本標記注入的方式,它是可以引用跨域 URL 的 js 腳本,不過需要提供一個回調函數(必須在您自己的頁面上),因此,你可以自己處理結果。 本文介紹了 JSONP 的是怎么在 jQuery,MooTools 的,Dojo Toolkit 中實現的。

jQuery 的 JSONP1. 什么是 JSONP

要了解 JSONP,不得不提一下 JSON,那什么是 JSON?

JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.

JSONP(JSON with Padding) 是一個非官方的協議,它允許在服務器端集成 Script tags 返回至客戶端,通過 javascript callback 的形式實現跨域訪問(這僅僅是 JSONP 簡單的實現形式)。

2. JSONP有什么用

由于同源策略的限制,XmlHttpRequest 只允許請求當前源(域名、協議、端口)的資源,為了實現跨域請求,可以通過 script 標簽實現跨域請求,然后在服務端輸出 JSON 數據并執行回調函數,從而解決了跨域的數據請求。

jQuery.getJSON 方法:

Js 代碼如下:

jQuery.getJSON('http://search.twitter.com/search.json?callback=?',{ q: 'Arsenal' },function(tweets) { // Handle response here console.info('Twitter returned: ',tweets); });

或者類似

Js 代碼如下:

$.ajax({ type:'get', data:'random = '+Math.random(), url:url, dataType:'jsonp', jsonp:'callback', success:function(data){ $.each(data, function(key, val) { $('#myDiv').html($('#myDiv').html()+val.cvalue+'</br>'); }); } });

回調方法的參數通過 getJSON 就可以獲取到 json 對象

MooTools JSONP

MooTools 需要 Request.JSONP Class,可以從這里下載 MooTools More。選擇 Request.JSONP

這樣從另一個域獲取 JSON 就是小菜一碟了

Js 代碼如下:

new Request.JSONP({ url: 'http://search.twitter.com/search.json', data: { q: 'Arsenal' },//提交的參數, 沒有參數可以不寫 callbackKey: 'jsoncallback',//自己定義回調函數的參數名稱 onComplete: function(tweets) { // Log the result to console for inspection console.info('Twitter returned: ',tweets); } }).send();

如果自己定義了回調函數的參數名稱,跟 jquery 一樣

服務器端你需要這樣去取得:

Js 代碼如下:

String callback = request.getParameter('jsoncallback');//取得回調方法名 response.setHeader('Cache-Control', 'no-cache'); response.setContentType('text/json;charset = UTF-8'); PrintWriter out; try { out = response.getWriter(); out.print(callback+'('+message+')');//這里是關鍵.主要就是這里 out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); }

順便說一句:個人比較喜歡 mootools 的語法結構,和框架設計思路,再次贊美!

Dojo JSONP

JSONP 在 Dojo Toolkit 中需要用上 dojo.io.script (點擊可以查看示例)

Js 代碼如下:

// dojo.io.script is an external dependency, so it must be required dojo.require('dojo.io.script'); // When the resource is ready dojo.ready(function() { // Use the get method dojo.io.script.get({ // The URL to get JSON from Twitter url: 'http://search.twitter.com/search.json', // The callback paramater callbackParamName: 'callback', // Twitter requires 'callback' // The content to send content: { q: 'Arsenal' }, // The success callback load: function(tweetsJson) { // Twitter sent us information! // Log the result to console for inspection console.info('Twitter returned: ',tweetsJson); } }); });

JSONP 是一種非常有效的,可靠的,容易實現的遠程數據獲取方式。JSONP 的策略也使開發人員能夠避免繁瑣的服務器代理方式,很方便的獲取數據。

JSONP (JSON with Padding) 是一個非官方的協議,它允許在服務器端集成 Script tags 返回至客戶端,通過 javascript callback 的形式實現跨域訪問(這僅僅是 JSONP 簡單的實現形式)。

客戶端代碼:

<meta content='text/html; charset=utf-8' http-equiv='Content-Type' /> <script type='text/javascript'> function jsonpCallback(result) {//alert(result);for(var i in result) { alert(i+':'+result[i]); //循環輸出a:1, b:2, etc.} } var JSONP=document.createElement('script'); JSONP.type = 'text/javascript'; JSONP.src = 'http://crossdomain.com/services.php?callback = jsonpCallback'; document.getElementsByTagName('head')[0].appendChild(JSONP); </script>

服務端代碼:

<?php //服務端返回 JSON 數據 $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); $result=json_encode($arr); //echo $_GET['callback'].'('Hello,World!')'; //echo $_GET['callback'].'($result)'; //動態執行回調函數 $callback = $_GET['callback']; echo $callback.'($result)';

到此這篇關于AJAX跨域請求獲取JSON數據的文章就介紹到這了,更多相關AJAX跨域請求獲取JSON數據內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Ajax
主站蜘蛛池模板: 久久精品一区二区三区四区 | 国产精品不卡片视频免费观看 | 国产在线精品福利大全 | 岛国片在线播放 | 欧美日韩中文字幕一区二区高清 | 在线亚洲激情 | 中国成熟xxx视频 | 麻豆高清视频在线观看 | 日本黄色福利视频 | 久久乐国产精品亚洲综合18 | 免费一级欧美在线观看视频片 | 日本三级韩国三级三级a级按摩 | 国产一区中文字幕在线观看 | 91三级| 欧美三黑人一级特黄曰皮 | 精品一区二区三区色花堂 | 在线麻豆国产传媒60在线观看 | 黄色一级片中国 | 国产精品福利网站 | 亚洲国产精品va在线观看麻豆 | a级毛片毛片免费观看久潮喷 | 91视频聊天网 | 成人18免费入口 | 欧洲精品码一区二区三区免费看 | 国产1000部成人免费视频 | 国产欧美日本亚洲精品五区 | 欧美禁片在线观看免费 | 玖玖精品视频在线观看 | 亚洲精品久久片久久 | 亚洲高清在线观看视频 | 免费一级特黄视频 | 国产国语一级毛片 | 永久免费观看视频 | 国产性猛交xx乱 | 91国内精品线免费播放 | 精品国产福利在线 | 96免费精品视频在线观看 | 一级黄色录像播放 | a毛片基地免费全部香蕉 | 欧美日韩一区二区三区色综合 | 国产在热线精品视频国产一二 |