国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 擴展 > JSON > 正文

jsonp格式前端發(fā)送和后臺接受寫法的代碼詳解

2024-09-06 20:18:10
字體:
來源:轉載
供稿:網(wǎng)友

什么是JSONP?

先說說JSONP是怎么產生的:

其實網(wǎng)上關于JSONP的講解有很多,但卻千篇一律,而且云里霧里,對于很多剛接觸的人來講理解起來有些困難,小可不才,試著用自己的方式來闡釋一下這個問題,看看是否有幫助。

1、一個眾所周知的問題,Ajax直接請求普通文件存在跨域無權限訪問的問題,甭管你是靜態(tài)頁面、動態(tài)網(wǎng)頁、web服務、WCF,只要是跨域請求,一律不準;

2、不過我們又發(fā)現(xiàn),Web頁面上調用js文件時則不受是否跨域的影響(不僅如此,我們還發(fā)現(xiàn)凡是擁有"src"這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>);

3、于是可以判斷,當前階段如果想通過純web端(ActiveX控件、服務端代理、HTML5之Websocket等方式不算)跨域訪問數(shù)據(jù)就只有一種可能,那就是在遠程服務器上設法把數(shù)據(jù)裝進js格式的文件里,供客戶端調用和進一步處理;

4、恰巧我們已經知道有一種叫做JSON的純字符數(shù)據(jù)格式可以簡潔的描述復雜數(shù)據(jù),更妙的是JSON還被js原生支持,所以在客戶端幾乎可以隨心所欲的處理這種格式的數(shù)據(jù);

5、這樣子解決方案就呼之欲出了,web客戶端通過與調用腳本一模一樣的方式,來調用跨域服務器上動態(tài)生成的js格式文件(一般以JSON為后綴),顯而易見,服務器之所以要動態(tài)生成JSON文件,目的就在于把客戶端需要的數(shù)據(jù)裝入進去。

6、客戶端在對JSON文件調用成功之后,也就獲得了自己所需的數(shù)據(jù),剩下的就是按照自己需求進行處理和展現(xiàn)了,這種獲取遠程數(shù)據(jù)的方式看起來非常像AJAX,但其實并不一樣。

7、為了便于客戶端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議,人們把它稱作JSONP,該協(xié)議的一個要點就是允許用戶傳遞一個callback參數(shù)給服務端,然后服務端返回數(shù)據(jù)時會將這個callback參數(shù)作為函數(shù)名來包裹住JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動處理返回數(shù)據(jù)了。

什么是JSON?

前面簡單說了一下,JSON是一種基于文本的數(shù)據(jù)交換方式,或者叫做數(shù)據(jù)描述格式,你是否該選用他首先肯定要關注它所擁有的優(yōu)點。

JSON的優(yōu)點:

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

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

3、輕量級數(shù)據(jù)格式,占用字符數(shù)量極少,特別適合互聯(lián)網(wǎng)傳遞;

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

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

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

好了,回歸正題,

jsonp是ajax提交的一種格式不會受跨域限制

一.前端發(fā)送

<button>11111</button><script src="https://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script><script>  document.querySelector('button').onclick = function () {    $.ajax({      url: 'http://localhost:8000/test',      type: 'get',      dataType: 'jsonp',      data: {      //注意內容必須為字典        aaa:aaa    //字典里內容前面key可以不加"",默認會給你加上""變成字符串但是不會當成變量      },         //字典后面value有''為字符串,沒有為變量      success: function (data) {        console.log(data);      }    });  }</script>

二.后臺接受

#我就拿python舉例,其他也大同小異from django.shortcuts import render,HttpResponse,redirectdef test(request):  callback=request.GET.get('callback')  print(dict(request.GET)) #傳過來的內容他會打散,具體的自己看一下就知道    #注意點返回的字符串必須是 'callback+("返回的字符串")' 這樣的一個字符串,不然前端不會接收  return HttpResponse(callback+'("ok")')
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清远市| 乌鲁木齐县| 雷山县| 中卫市| 房山区| 华阴市| 读书| 平安县| 宁南县| 望都县| 敦化市| 彝良县| 安多县| 布尔津县| 闸北区| 古交市| 丽江市| 滦南县| 石阡县| 砀山县| 台南县| 徐汇区| 手机| 平武县| 永定县| 邢台市| 松江区| 浙江省| 湖北省| 左云县| 塔河县| 夏津县| 桃源县| 来宾市| 望城县| 昔阳县| 小金县| 津南区| 岳西县| 保靖县| 新龙县|