麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

yii2-結(jié)合angularjs實(shí)現(xiàn)application/json的post數(shù)據(jù)提交

2019-11-10 19:19:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
HTTP/1.1 協(xié)議規(guī)定的 HTTP 請(qǐng)求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來(lái)向服務(wù)端提交數(shù)據(jù),本文主要討論 POST 提交數(shù)據(jù)的幾種方式。我們知道,HTTP 協(xié)議是以 ASCII 碼傳輸,建立在 TCP/ip 協(xié)議之上的應(yīng)用層規(guī)范。規(guī)范把 HTTP 請(qǐng)求分為三個(gè)部分:狀態(tài)行、請(qǐng)求頭、消息主體。類(lèi)似于下面這樣:<method> <request-url> <version><headers> <entity-body></entity-body></headers></version></request-url></method>協(xié)議規(guī)定 POST 提交的數(shù)據(jù)必須放在消息主體(entity-body)中,但協(xié)議并沒(méi)有規(guī)定數(shù)據(jù)必須使用什么編碼方式。實(shí)際上,開(kāi)發(fā)者完全可以自己決定消息主體的格式,只要最后發(fā)送的 HTTP 請(qǐng)求滿(mǎn)足上面的格式就可以.但是,數(shù)據(jù)發(fā)送出去,還要服務(wù)端解析成功才有意義。一般服務(wù)端語(yǔ)言如 php、Python 等,以及它們的 framework,都內(nèi)置了自動(dòng)解析常見(jiàn)數(shù)據(jù)格式的功能。服務(wù)端通常是根據(jù)請(qǐng)求頭(headers)中的 Content-Type 字段來(lái)獲知請(qǐng)求中的消息主體是用何種方式編碼,再對(duì)主體進(jìn)行解析。所以說(shuō)到 POST 提交數(shù)據(jù)方案,包含了 Content-Type 和消息主體編碼方式兩部分。POST http://www.example.com HTTP/1.1Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3首先,Content-Type 被指定為 application/x-www-form-urlencoded;其次,提交的數(shù)據(jù)按照 key1=val1&key2=val2 的方式進(jìn)行編碼,key 和 val 都進(jìn)行了 URL 轉(zhuǎn)碼。大部分服務(wù)端語(yǔ)言都對(duì)這種方式有很好的支持。例如 PHP 中,$_POST['title'] 可以獲取到 title 的值,$_POST['sub'] 可以得到 sub 數(shù)組。很多時(shí)候,我們用 Ajax 提交數(shù)據(jù)時(shí),也是使用這種方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默認(rèn)值都是application/x-www-form-urlencoded;charset=utf-8所以我們都可以方便地在服務(wù)端通過(guò)$_POST[]來(lái)獲取值。但現(xiàn)在在移動(dòng)互聯(lián)網(wǎng)的發(fā)展中,特別是終端多樣化,前端的工程化越來(lái)越成熟,很多的應(yīng)用使用 Ajax 進(jìn)行數(shù)據(jù)交互之后,我們完全可以定義新的數(shù)據(jù)提交方式,給開(kāi)發(fā)帶來(lái)更多便利。下面要說(shuō)的就是application/json這種數(shù)據(jù)交換方式。application/json 這個(gè) Content-Type 作為響應(yīng)頭大家肯定不陌生,在服務(wù)端將數(shù)據(jù)以json序列化的方式返回前端。實(shí)際上,現(xiàn)在越來(lái)越多的人把它作為請(qǐng)求頭,用來(lái)告訴服務(wù)端消息主體是序列化后的 JSON 字符串。AngularJS 中的 Ajax 功能,默認(rèn)就是提交 application/json格式。例如下面這段代碼:var data = {'title':'test', 'sub' : [1,2,3]};$http.post(url, data).success(function(result) {    ...});最終發(fā)送的請(qǐng)求是:POST http://www.example.com HTTP/1.1Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]}這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合 RESTful 的接口。各大抓包工具如 Chrome 自帶的開(kāi)發(fā)者工具、Firebug、Fiddler,都會(huì)以樹(shù)形結(jié)構(gòu)展示 JSON 數(shù)據(jù),非常友好。但也有些服務(wù)端語(yǔ)言還沒(méi)有支持這種方式,例如 php 就無(wú)法通過(guò) $_POST 對(duì)象從上面的請(qǐng)求中獲得內(nèi)容。這時(shí)候,需要自己動(dòng)手處理下:在請(qǐng)求頭中 Content-Type 為 application/json 時(shí),從 php://input 里獲得原始輸入流,再 json_decode 成對(duì)象。一些 php 框架已經(jīng)開(kāi)始這么做了。當(dāng)然 AngularJS 也可以配置為使用 x-www-form-urlencoded 方式提交數(shù)據(jù)。如有需要,可以參考我之前寫(xiě)的一篇bloghttp://blog.csdn.net/u012979009/article/details/52301118下面針對(duì)于自己使用的yii2框架,詳細(xì)說(shuō)明一下如何實(shí)現(xiàn)接收application/json格式。yii2在使用restful的api的時(shí)候,前端可能會(huì)發(fā)送application/json或者text/json,比如上面說(shuō)的angularjs。我們只需要在配置文件中reauest組件中配置parsers數(shù)組,即可,如下面的紅色部分。'components' => [        'request' => [            'csrfParam' => '_csrf-frontend',            'cookieValidationKey' => '1234567',            'parsers' => [                'application/json' => 'yii/web/JsonParser',                'text/json' => 'yii/web/JsonParser',            ],        ],    .....]
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精热| 亚洲网视频 | 91婷婷射 | 羞羞视频一区二区 | 久久久久久久国产a∨ | 男女无套免费视频 | 成人一区二区三区四区 | 免费观看一区二区三区视频 | 久久精品成人免费国产片桃视频 | 蜜桃一本色道久久综合亚洲精品冫 | 麻豆蜜桃在线观看 | 韩国精品一区二区三区四区五区 | 91美女视频在线 | 精品国产一区二区三区四区在线 | 国产精品久久久久久婷婷天堂 | 亚洲男人的天堂在线视频 | 免费看成年人网站 | 成人免费区 | 99最新网址 | 91精品国产乱码久久桃 | 91精品国产99久久久久久红楼 | 91精品国产九九九久久久亚洲 | 国产精品久久久久久久不卡 | 国产精品久久久久久久娇妻 | 久久人人爽人人爽人人片av高请 | 久久成人综合网 | 欧美成人三级大全 | 亚洲一区动漫 | 久久激情小视频 | 成人毛片视频免费看 | 性片久久 | www.99热精品| 久久久噜噜噜久久熟有声小说 | 最新av免费网址 | 黑人日比视频 | 精品国产一区二区三区成人影院 | 美国人成人在线视频 | 日本残忍极度灌浣肠视频 | 男女羞羞在线观看 | 97超碰资源站 | 九九色在线观看 |