<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
        主站蜘蛛池模板: 99视频在线观看免费| 亚洲AV无码一区二区大桥未久| 一级中文字幕免费乱码专区| 日产乱码一卡二卡三免费| 亚洲国产日韩精品| 亚洲色欲或者高潮影院| 日本免费一区二区久久人人澡| 亚洲日韩精品无码一区二区三区 | 国产午夜亚洲不卡| 成年免费a级毛片免费看无码| AV在线播放日韩亚洲欧| 久久九九免费高清视频 | 亚洲高清中文字幕| 2021免费日韩视频网| 亚洲人成电影在线播放| a毛片成人免费全部播放| 日本亚洲成高清一区二区三区| 伊人久久免费视频| 亚洲AV成人影视在线观看| 免费看无码自慰一区二区| 男人j进女人p免费视频| 日日噜噜噜噜夜夜爽亚洲精品| 3344在线看片免费| 亚洲冬月枫中文字幕在线看 | 亚洲欧洲久久av| 最近免费中文字幕大全免费 | 久久精品免费观看国产| 久久精品国产亚洲av麻豆蜜芽| 国产色爽免费视频| 免费看成人AA片无码视频吃奶| 亚洲的天堂av无码| 夜色阁亚洲一区二区三区| 免费一级毛片在线播放视频| 亚洲国产午夜电影在线入口| 一级毛片直播亚洲| 久久久精品2019免费观看| 国产精品无码亚洲精品2021 | 免费一级毛片不卡不收费| 亚洲AV无码久久久久网站蜜桃| 四虎永久成人免费影院域名| 国产一级片免费看|