<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        主站蜘蛛池模板: 最近中文字幕mv手机免费高清 | 亚在线观看免费视频入口| 国产在线98福利播放视频免费| 亚洲不卡视频在线观看| 久久久久久免费视频| 亚洲av日韩av无码av| 岛国av无码免费无禁网站| 亚洲熟妇无码AV不卡在线播放| 成年女人免费视频播放体验区| 亚洲另类无码专区丝袜| 日本一道高清不卡免费| 青青草国产免费久久久91| 亚洲av永久无码制服河南实里 | 亚洲欧洲国产精品你懂的| 久别的草原电视剧免费观看| 亚洲成熟xxxxx电影| 我们的2018在线观看免费高清| 亚洲国产精品一区二区久| 中文毛片无遮挡高清免费| 美女黄网站人色视频免费国产| 日韩国产欧美亚洲v片| 亚洲国产精品成人久久蜜臀| 久久精品免费大片国产大片| 午夜国产羞羞视频免费网站| 一级做受视频免费是看美女| 亚洲日韩精品一区二区三区无码| 97视频免费观看2区| 亚洲欧美国产国产综合一区| 亚洲av日韩av欧v在线天堂| 中文字幕在线免费视频| 亚洲综合在线成人一区| 永久黄网站色视频免费| 中文字幕在线视频免费| 亚洲成a人片在线看| 亚洲国产精品成人| 久久精品国产免费观看 | 亚洲美女色在线欧洲美女| 成在人线AV无码免费| 国产精品永久免费| 亚洲一区二区三区在线观看蜜桃| 免费一级国产生活片|