国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

AJAX跨域請求JSONP獲取JSON數據的實例代碼

來源:懂視網 責編:小采 時間:2020-11-27 22:51:46
文檔

AJAX跨域請求JSONP獲取JSON數據的實例代碼

AJAX跨域請求JSONP獲取JSON數據的實例代碼:Asynchronous JavaScript and XML (Ajax) 是驅動新一代 Web 站點(流行術語為 Web 2.0 站點)的關鍵技術。Ajax 允許在不干擾 Web 應用程序的顯示和行為的情況下在后臺進行數據檢索。使用XMLHttpRequest 函數獲取數據,它是一種 API,允許客
推薦度:
導讀AJAX跨域請求JSONP獲取JSON數據的實例代碼:Asynchronous JavaScript and XML (Ajax) 是驅動新一代 Web 站點(流行術語為 Web 2.0 站點)的關鍵技術。Ajax 允許在不干擾 Web 應用程序的顯示和行為的情況下在后臺進行數據檢索。使用XMLHttpRequest 函數獲取數據,它是一種 API,允許客

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

不過,由于受到瀏覽器的限制,該方法不允許跨域通信。如果嘗試從不同的域請求數據,會出現安全錯誤。如果能控制數據駐留的遠程服務器并且每個請求都前往同一域,就可以避免這些安全錯誤。但是,如果僅停留在自己的服務器上,Web 應用程序還有什么用處呢?如果需要從多個第三方服務器收集數據時,又該怎么辦?

理解同源策略

同源策略阻止從一個域上加載的腳本獲取或操作另一個域上的文檔屬性。也就是說,受到請求的 URL 的域必須與當前 Web 頁面的域相同。這意味著瀏覽器隔離來自不同源的內容,以防止它們之間的操作。這個瀏覽器策略很舊,從 Netscape Navigator 2.0 版本開始就存在。

克服該限制的一個相對簡單的方法是讓 Web 頁面向它源自的 Web 服務器請求數據,并且讓 Web 服務器像代理一樣將請求轉發給真正的第三方服務器。盡管該技術獲得了普遍使用,但它是不可伸縮的。另一種方式是使用框架要素在當前 Web 頁面中創建新區域,并且使用GET 請求獲取任何第三方資源。不過,獲取資源后,框架中的內容會受到同源策略的限制。

克服該限制更理想方法是在 Web 頁面中插入動態腳本元素,該頁面源指向其他域中的服務 URL 并且在自身腳本中獲取數據。腳本加載時它開始執行。該方法是可行的,因為同源策略不阻止動態腳本插入,并且將腳本看作是從提供 Web 頁面的域上加載的。但如果該腳本嘗試從另一個域上加載文檔,就不會成功。幸運的是,通過添加 JavaScript Object Notation (JSON) 可以改進該技術。

1、什么是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數據并執行回調函數,從而解決了跨域的數據請求。

3、如何使用JSONP?

下邊這一DEMO實際上是JSONP的簡單表現形式,在客戶端聲明回調函數之后,客戶端通過script標簽向服務器跨域請求數據,然后服務端返回相應的數據并動態執行回調函數。

HTML代碼 (任一):

<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>

或者

Html代碼

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

JavaScript的鏈接,必須在function的下面。

服務端PHP代碼 (services.php):

Php代碼 

<?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)"; 

 如果將上述JS客戶端代碼用jQuery的方法來實現,也非常簡單。

$.getJSON
$.ajax
$.get

客戶端JS代碼在jQuery中的實現方式1:

Js代碼 

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
 $.getJSON("http://crossdomain.com/services.php?callback=?", 
 function(result) { 
 for(var i in result) { 
 alert(i+":"+result[i]);//循環
輸出a:1,b:2,etc. } }); </script>

客戶端JS代碼在jQuery中的實現方式2:

Js代碼 

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
 $.ajax({ 
 url:"http://crossdomain.com/services.php", 
 dataType:'jsonp', 
 data:'', 
 jsonp:'callback', 
 success:function(result) { 
 for(var i in result) { 
 alert(i+":"+result[i]);//循環
輸出a:1,b:2,etc. } }, timeout:3000 }); </script>

客戶端JS代碼在jQuery中的實現方式3:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $.get('http://crossdomain.com/services.php?callback=?', {name: encodeURIComponent('tester')}, function (json) { for(var i in json) alert(i+":"+json[i]); }, 'jsonp'); 
</script> 
 
其中 jsonCallback 是客戶端注冊的,獲取跨域服務器上的json數據后,回調的函數。

http://crossdomain.com/services.php?callback=jsonpCallback

這個 url 是跨域服務器取 json 數據的接口,參數為回調函數的名字,返回的格式為

jsonpCallback({msg:'this is json data'}) 

Jsonp原理:

首先在客戶端注冊一個callback, 然后把callback的名字傳給服務器。

此時,服務器先生成 json 數據。
然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數 jsonp.

最后將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。

客戶端瀏覽器,解析script標簽,并執行返回的 javascript 文檔,此時數據作為參數,傳入到了客戶端預先定義好的 callback 函數里.(動態執行回調函數)

使用JSON的優點在于:

比XML輕了很多,沒有那么多冗余的東西。

JSON也是具有很好的可讀性的,但是通常返回的都是壓縮過后的。不像XML這樣的瀏覽器可以直接顯示,瀏覽器對于JSON的格式化的顯示就需要借助一些插件了。

在JavaScript中處理JSON很簡單。

其他語言例如PHP對于JSON的支持也不錯。

JSON也有一些劣勢:

JSON在服務端語言的支持不像XML那么廣泛,不過JSON.org上提供很多語言的庫。

如果你使用eval()來解析的話,會容易出現安全問題。

盡管如此,JSON的優點還是很明顯的。他是Ajax數據交互的很理想的方式。

主要提示:

JSONP 是構建 mashup 的強大技術,但不幸的是,它并不是所有跨域通信需求的萬靈藥。它有一些缺陷,在提交開發資源之前必須認真考慮它們。

第一,也是最重要的一點,沒有關于 JSONP 調用的錯誤處理。如果動態腳本插入有效,就執行調用;如果無效,就靜默失敗。失敗是沒有任何提示的。例如,不能從服務器捕捉到 404 錯誤,也不能取消或重新開始請求。不過,等待一段時間還沒有響應的話,就不用理它了。(未來的 jQuery 版本可能有終止 JSONP 請求的特性)。

JSONP 的另一個主要缺陷是被不信任的服務使用時會很危險。因為 JSONP 服務返回打包在函數調用中的 JSON 響應,而函數調用是由瀏覽器執行的,這使宿主 Web 應用程序更容易受到各類攻擊。如果打算使用 JSONP 服務,了解它能造成的威脅非常重要。

以上所述是小編給大家介紹的AJAX跨域請求JSONP獲取JSON數據的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

AJAX跨域請求JSONP獲取JSON數據的實例代碼

AJAX跨域請求JSONP獲取JSON數據的實例代碼:Asynchronous JavaScript and XML (Ajax) 是驅動新一代 Web 站點(流行術語為 Web 2.0 站點)的關鍵技術。Ajax 允許在不干擾 Web 應用程序的顯示和行為的情況下在后臺進行數據檢索。使用XMLHttpRequest 函數獲取數據,它是一種 API,允許客
推薦度:
標簽: json json數據 ajax
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产91原创 | 日韩精品第三页 | 精品国产网站 | 欧美v在线 | 欧美国产日韩在线观看 | 欧美va免费精品高清在线 | 777久久成人影院 | 国产一区二区福利久久 | 亚洲一区二区在线成人 | 久久久高清国产999尤物 | 极品美女aⅴ高清在线观看 激情综合久久 | 精品久久亚洲一级α | va欧美国产在线视频 | 成人精品一区二区三区 | 亚洲 欧美 国产另类首页 | 黄色成人在线视频 | 精品国产亚一区二区三区 | 国产在线看不卡一区二区 | 亚洲一级毛片免观看 | 国模私拍一区二区三区 | 免费黄色在线观看 | 影音先锋中文字幕资源 | 日韩 亚洲 欧美 中文 高清 | 高清不卡一区 | 日韩精品a在线视频 | 日本另类αv欧美另类aⅴ | 好骚综合在线 | 国产手机在线国内精品 | 日韩欧美一区二区三区不卡视频 | 欧美成人久久电影香蕉 | 国产一区二区三区在线 | 国产亚洲视频在线 | 欧美a在线观看 | 日韩欧美一区二区三区四区 | 国产精品视频免费观看 | 亚洲精品乱码久久久久久v 亚洲精品免费观看 | 国内精品自产拍在线观看91 | h片在线看 | 国产一区二区免费视频 | 黄色a视频 | 日本人乱人乱亲乱色视频观看 |