當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
初步了解JSONP
一、JSON 與 JSONP?
JSON是一種基于文本的數(shù)據(jù)交換方式(數(shù)據(jù)描述格式),JSONP是一種非官方跨域數(shù)據(jù)交互協(xié)議。
ajax的核心是通過(guò)XmlHttpRequest獲取非本頁(yè)內(nèi)容,而jsonp的核心則是動(dòng)態(tài)添加<script>標(biāo)簽來(lái)調(diào)用服務(wù)器提供的js腳本。
二、為什么要用JSONP
Ajax直接請(qǐng)求普通文件是跨域無(wú)權(quán)限訪問(wèn)的,但是Web頁(yè)面上調(diào)用js文件時(shí)則不受是否跨域影響,于是服務(wù)端可以將數(shù)據(jù)裝進(jìn)JS文件傳輸回來(lái)。jQuery支持JSONP。
方式:用戶傳遞一個(gè)callback參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會(huì)將這個(gè)callback參數(shù)作為函數(shù)名來(lái)包裹住JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來(lái)自動(dòng)處理返回?cái)?shù)據(jù)了。
?
三、DEMO
JQUERY
?
$.ajax({type: "get",async: false,//true為異步請(qǐng)求(默認(rèn))。false為同步請(qǐng)求,同步請(qǐng)求將鎖住瀏覽器,用戶其它操作必須等待請(qǐng)求完成才可以執(zhí)行。url: "",data:{},//發(fā)送到服務(wù)器的數(shù)據(jù)。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式。GET 請(qǐng)求中將附加在 URL 后。dataType: "jsonp",//預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動(dòng)根據(jù) HTTP 包 MIME 信息來(lái)智能判斷.使用 JSONP 形式調(diào)用函數(shù)時(shí),如 "myurl?callback=?" jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。jsonp: "callback",//傳遞給請(qǐng)求處理程序或頁(yè)面的,用以獲得jsonp回調(diào)函數(shù)名的參數(shù)名(默認(rèn)為:callback)jsonpCallback:"",//自定義的jsonp回調(diào)函數(shù)名稱,默認(rèn)為jQuery自動(dòng)生成的隨機(jī)函數(shù)名,也可以寫(xiě)"?",jQuery會(huì)自動(dòng)為你處理數(shù)據(jù),(如果沒(méi)設(shè)置,服務(wù)器可以用$_GET['callback']取到j(luò)query默認(rèn)生成的隨機(jī)函數(shù)名)success: function(data){//請(qǐng)求成功后的回調(diào)函數(shù)。console.log(data);},error: function(msg){//請(qǐng)求失敗時(shí)調(diào)用此函數(shù)。console.log(msg);}});
PHP
function jsonp($json){$callback = isset($_GET['callback']) ? $_GET['callback'] : $_POST['callback'];if (!preg_match('|^[0-9a-zA-Z_]+$|',$callback))exit('callback invalid');if (is_array($json)){$json = json_encode($json);}echo $callback.'('.$json.');';exit;}jsonp(array('ret'=>0));
轉(zhuǎn)載于:https://www.cnblogs.com/lzs-888/p/5392881.html
總結(jié)
- 上一篇: 抑郁症的前期体现有哪些
- 下一篇: Spring学习总结(9)——Sprin