亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS跨域交互(jQuery+php)之jsonp使用心得

2019-11-20 09:34:33
字體:
來源:轉載
供稿:網友

什么是jsonp?

說到jsonp,你可能最先想到JSON;它還真和JSON有關系;

JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數據訪問的問題。由于同源策略,一般來說位于 server1.example.com 的網頁無法與不是 server1.example.com的服務器溝通,而 HTML 的<script> 元素是一個例外。利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執行而不是用 JSON 解析器解析。

JSONP(JSON with Padding),我更傾向于把最后一個字母P理解為 protocol(協議,約定);

JSON的優點:

  1、基于純文本,跨平臺傳遞極其簡單;

  2、Javascript原生支持,后臺語言幾乎全部支持;

  3、輕量級數據格式,占用字符數量極少,特別適合互聯網傳遞;

  4、可讀性較強,雖然比不上XML那么一目了然,但在合理的依次縮進之后還是很容易識別的;

  5、容易編寫和解析,當然前提是你要知道數據結構;

  JSON的缺點當然也有,但在作者看來實在是無關緊要的東西,所以不再單獨說明。

有這么一個故事:

A男和B女居住在不同的國家A國和B國,在一次去C國旅行的途中相遇了,雙方聊的比較Happy,旅行結束都回國了;但A男總是會想B女,想聯系上B女,無奈當時沒有留下B女的電話、郵箱、微信、QQ號碼這些可以更加即時的聯系方式,只是閑聊間知道B女地址,那就只能寫信吧去C國也不太現實;于是就寫信把自己的各種即時聯系方式都寫進去了,一封信寄出去了過了一段時間沒有回音又寫一封,就是沒有收到C友的電話等任何回音;對方收到了沒有呢,確定是收到了也看了。
這是為什么呢?C女不想搭理他唄(沒有按A男指定的方式回調)!

JSONP就是這么一回事,你知道對方的調用地址,告訴對方你的回調函數名稱是什么,但對方如果不配合,就是不調用你約定的回調函數名稱,你調用多少次也沒用,所以JSONP的關鍵還是要對方配合你才行。

js跨域交互實現原理

HTML <script> 標簽,對就是它,世界因它而美好!

你可以使用這個標簽加載任何其它可訪問到的網站的js文件試試,我就不多說了;

跨域交互一:jQuery.getScript

這個例子比較簡單易懂,使用固定的回調函數名稱:fncallback

調用端,也可以說是客戶端:

我是在本地測試,跑了多個Web服務,本地頁面訪問地址:http://localhost:88/

網頁中的JS代碼如下:

<script type="text/javascript" src="jquery-1.10.2.min.js"></script> <script type="text/javascript"> //定義名稱為“fncallback”的回調函數,參數接收JSON對象; function fncallback(data){ $(document.body).append("<hr />getScript ok!" + data.reqUrl); } //注冊頁面加載完成回調函數(匿名) $(document).ready(function(){ //使用getScript方法調用跨域腳本; $.getScript("http://localhost/test2.php"); }); </script> 

效果:在頁面尾部增加一條線,以及:getScript ok! ,后面緊跟被調用端返回的它接收到的請求地址:

getScript ok!/test2.php?_=1467261287339 

后面為什么會多了個“?_=1467261287339”呢?

這是防止瀏覽器從緩存去加載這個URL地址的內容的!由jQuery自動添加;

被調用端,也可以說是服務端

服務端后臺語言是PHP,通過Nginx代理的,端口為:80,所以訪問地址是:http://localhost/test2.php

test2.php 文件的內容:

<?php echo "var reqUrl = /"" . $_SERVER["REQUEST_URI"] . "/";"; echo "fncallback({/"reqUrl/": reqUrl });"; 

瀏覽器訪問:

通過瀏覽器訪問,自然沒有后面的參數,除非你自己手動加上;

跨域交互二:jQuery.getJSON

調用端:

<script type="text/javascript"> //注冊頁面加載完成回調函數(匿名) $(document).ready(function(){ //使用getJSON方法調用跨域腳本;注冊匿名回調函數 $.getJSON("http://localhost/test.php?callback=?", function(data){ $(document.body).append("<hr />getJSON ok!" + data.reqUrl); }); }); </script> 

注意:我在請求的地址中添加了“?callback=?”,這是做什么用的呢?

目的是讓jQuery為我自動生成一個回調函數的名稱,并將我注冊的匿名回調函數映射到這個“自動生成的回調函數名稱”上;
有點繞,我們來看看服務端返回的它收到的請求地址就明白了:

getJSON ok!/test.php?callback=jQuery1102031468501139651384_1467262280037&_=1467262280038 

看到callback后面跟了參數值了吧,這就是jQuery自動生成的;再看服務端代碼;

服務端

<?php echo "var reqUrl = /"" . $_SERVER["REQUEST_URI"] . "/";"; echo $_GET["callback"] . "({/"reqUrl/": reqUrl });"; 

通過 $_GET["callback"] 獲取客戶端傳遞過來的回調函數名稱;看輸出:

var reqUrl = "/test.php?callback=jQuery1102019717387174726153_1467262461959&_=1467262461960"; jQuery1102019717387174726153_1467262461959({"reqUrl": reqUrl });

跨域交互三:jQuery.ajax

調用端:

<script type="text/javascript"> //注冊頁面加載完成回調函數(匿名) $(document).ready(function(){ //使用ajax方法調用跨域腳本; $.ajax({ url:"http://localhost/test.php", dataType: 'jsonp', success: function(data){ $(document.body).append("<hr />ajax ok!" + data.reqUrl); } }); }); </script> 

注意:在請求的地址中不需要添加“?callback=?”,但我們使用“dataType: 'jsonp',”;

服務端

這個例子的服務端和上個是完全一樣的!

使用總結

使用 getScript 的方式,你可以自己定義一個回調函數的名稱,讓服務端響應的時候使用你指定的回調函數名稱;

使用 getJSON 的方式關鍵在于URL后面添加的“callback=?”;

使用 ajax 的方式關鍵在于參數中的數據類型設置“dataType: 'jsonp',”;

以上所述是小編給大家介紹的JS跨域交互(jQuery+php)之jsonp使用心得,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美中文字幕在线观看| 亚洲精品国产精品国自产在线| 精品国产精品三级精品av网址| 91亚洲精品久久久| 欧美第一黄网免费网站| 久久久亚洲欧洲日产国码aⅴ| 欧美日韩国产区| 日韩小视频网址| 欧美专区在线播放| 日韩色av导航| 国产精品视频公开费视频| 欧美成人性色生活仑片| 欧美成人sm免费视频| 亚洲最大的av网站| 亚洲精品一区二三区不卡| 国产美女精彩久久| 亚洲丁香久久久| 91免费视频国产| 欧美成人在线免费视频| 91免费人成网站在线观看18| 色先锋久久影院av| 中文字幕日韩精品有码视频| 欧美在线播放视频| 菠萝蜜影院一区二区免费| 国产精品久久久久久久av大片| 国产女精品视频网站免费| 色综合视频一区中文字幕| 欧美性猛交xxxxx水多| 81精品国产乱码久久久久久| 日韩免费黄色av| 亚洲欧洲在线观看| 欧美与黑人午夜性猛交久久久| 成人性生交大片免费观看嘿嘿视频| 国产91在线播放九色快色| 欧美激情一区二区三级高清视频| 日韩在线观看免费高清完整版| 久久久久久高潮国产精品视| 欧美电影在线观看网站| 亚洲第一精品夜夜躁人人爽| 国产成人一区二区在线| 亚洲专区在线视频| 中文字幕九色91在线| 欧美大成色www永久网站婷| 45www国产精品网站| 91精品免费久久久久久久久| 欧美极品在线播放| 国内自拍欧美激情| 欧美精品在线免费播放| 91精品国产99久久久久久| 欧美日韩中文字幕综合视频| 午夜精品一区二区三区av| 国产精品视频资源| 亚洲电影av在线| 91av在线免费观看视频| 国产在线视频2019最新视频| 中文字幕欧美日韩va免费视频| 97超视频免费观看| 久久久综合免费视频| 日本一区二三区好的精华液| 国产日韩欧美中文| 亚洲精品理论电影| 午夜精品久久久久久久久久久久| 欧美激情网站在线观看| 国产不卡视频在线| 欧美最近摘花xxxx摘花| 国产美女精品视频| 国产精品ⅴa在线观看h| 欧美性猛交视频| 成人在线一区二区| 亚洲伦理中文字幕| 日韩精品视频在线观看免费| 久久av在线播放| 国产精品狼人色视频一区| 亚洲一区精品电影| 精品综合久久久久久97| 国产69久久精品成人| 91美女高潮出水| 久久影视电视剧凤归四时歌| 日韩免费观看视频| 久久久久久中文| 亚洲成色www8888| 欧美乱大交xxxxx另类电影| 欧美黑人性视频| xvideos成人免费中文版| 亚洲xxxx在线| 中文字幕精品在线视频| 欧美日韩激情美女| 国产精品专区第二| 国产欧美日韩中文字幕| 91精品国产高清久久久久久久久| 欧美日韩国产精品一区二区三区四区| 欧美成人精品在线视频| 欧美国产中文字幕| 超碰97人人做人人爱少妇| 久久久精品欧美| 国产精品天天狠天天看| 综合激情国产一区| 成人写真视频福利网| 亚洲精品www久久久久久广东| 日韩二区三区在线| 九九九久久国产免费| 色综合久综合久久综合久鬼88| 国产精品视频免费观看www| 欧美三级欧美成人高清www| 午夜美女久久久久爽久久| 日韩精品免费观看| 92看片淫黄大片看国产片| 色诱女教师一区二区三区| 91在线播放国产| 亚洲欧美在线看| 日韩av在线免费观看| 亚洲国产精品电影在线观看| 日韩中文字幕视频在线| 久久中文久久字幕| 日本免费在线精品| 久久97久久97精品免视看| 国产亚洲精品va在线观看| 国产欧美一区二区三区在线| 亚洲午夜精品久久久久久性色| 欧美成人午夜激情在线| www.亚洲男人天堂| 亚洲va欧美va国产综合剧情| 欧美在线亚洲一区| 亚洲精品99999| 欧美精品videossex性护士| www.日韩av.com| 国产专区精品视频| 在线观看欧美日韩| 久久视频免费观看| 国产午夜精品全部视频播放| 国产亚洲精品久久| 最近中文字幕2019免费| 日韩精品视频在线| 亚洲欧美日本伦理| 国产精品伦子伦免费视频| 欧美裸体xxxx极品少妇| 国产精品∨欧美精品v日韩精品| 97在线观看视频国产| 7777精品久久久久久| 亚洲伊人久久大香线蕉av| 91精品国产91久久| 中国人与牲禽动交精品| 欧美体内谢she精2性欧美| 北条麻妃一区二区三区中文字幕| 欧美寡妇偷汉性猛交| 亚洲人成电影网站色| 伊人伊人伊人久久| 国产999精品久久久影片官网| 亚洲欧美制服丝袜| 亚洲影院高清在线| 日韩精品在线视频| 亚洲欧美日韩一区二区在线| 欧美精品少妇videofree| 欧美性猛交xxxx黑人| 欧美午夜精品久久久久久久| 久久91亚洲精品中文字幕奶水| 亚洲精品av在线播放| 国产91色在线|| 欧美日韩福利电影| 国产精品h在线观看| 国产视频精品一区二区三区| 97av在线视频| 亚洲成年人在线| 不卡伊人av在线播放|