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

首頁 > 學院 > 開發設計 > 正文

yii2-結合angularjs實現application/json的post數據提交

2019-11-10 19:30:27
字體:
來源:轉載
供稿:網友
HTTP/1.1 協議規定的 HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。其中 POST 一般用來向服務端提交數據,本文主要討論 POST 提交數據的幾種方式。我們知道,HTTP 協議是以 ASCII 碼傳輸,建立在 TCP/ip 協議之上的應用層規范。規范把 HTTP 請求分為三個部分:狀態行、請求頭、消息主體。類似于下面這樣:<method> <request-url> <version><headers> <entity-body></entity-body></headers></version></request-url></method>協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議并沒有規定數據必須使用什么編碼方式。實際上,開發者完全可以自己決定消息主體的格式,只要最后發送的 HTTP 請求滿足上面的格式就可以.但是,數據發送出去,還要服務端解析成功才有意義。一般服務端語言如 php、Python 等,以及它們的 framework,都內置了自動解析常見數據格式的功能。服務端通常是根據請求頭(headers)中的 Content-Type 字段來獲知請求中的消息主體是用何種方式編碼,再對主體進行解析。所以說到 POST 提交數據方案,包含了 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;其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼。大部分服務端語言都對這種方式有很好的支持。例如 PHP 中,$_POST['title'] 可以獲取到 title 的值,$_POST['sub'] 可以得到 sub 數組。很多時候,我們用 Ajax 提交數據時,也是使用這種方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默認值都是application/x-www-form-urlencoded;charset=utf-8所以我們都可以方便地在服務端通過$_POST[]來獲取值。但現在在移動互聯網的發展中,特別是終端多樣化,前端的工程化越來越成熟,很多的應用使用 Ajax 進行數據交互之后,我們完全可以定義新的數據提交方式,給開發帶來更多便利。下面要說的就是application/json這種數據交換方式。application/json 這個 Content-Type 作為響應頭大家肯定不陌生,在服務端將數據以json序列化的方式返回前端。實際上,現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化后的 JSON 字符串。AngularJS 中的 Ajax 功能,默認就是提交 application/json格式。例如下面這段代碼:var data = {'title':'test', 'sub' : [1,2,3]};$http.post(url, data).success(function(result) {    ...});最終發送的請求是:POST http://www.example.com HTTP/1.1Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]}這種方案,可以方便的提交復雜的結構化數據,特別適合 RESTful 的接口。各大抓包工具如 Chrome 自帶的開發者工具、Firebug、Fiddler,都會以樹形結構展示 JSON 數據,非常友好。但也有些服務端語言還沒有支持這種方式,例如 php 就無法通過 $_POST 對象從上面的請求中獲得內容。這時候,需要自己動手處理下:在請求頭中 Content-Type 為 application/json 時,從 php://input 里獲得原始輸入流,再 json_decode 成對象。一些 php 框架已經開始這么做了。當然 AngularJS 也可以配置為使用 x-www-form-urlencoded 方式提交數據。如有需要,可以參考我之前寫的一篇bloghttp://blog.csdn.net/u012979009/article/details/52301118下面針對于自己使用的yii2框架,詳細說明一下如何實現接收application/json格式。yii2在使用restful的api的時候,前端可能會發送application/json或者text/json,比如上面說的angularjs。我們只需要在配置文件中reauest組件中配置parsers數組,即可,如下面的紅色部分。'components' => [        'request' => [            'csrfParam' => '_csrf-frontend',            'cookieValidationKey' => '1234567',            'parsers' => [                'application/json' => 'yii/web/JsonParser',                'text/json' => 'yii/web/JsonParser',            ],        ],    .....]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭水| 宝山区| 怀远县| 师宗县| 尖扎县| 桓仁| 噶尔县| 绍兴县| 澄迈县| 芜湖市| 繁昌县| 万荣县| 永登县| 花莲县| 江达县| 庐江县| 天津市| 定兴县| 城固县| 绍兴县| 金阳县| 武冈市| 巴青县| 静宁县| 安达市| 平度市| 尤溪县| 长兴县| 长丰县| 岱山县| 晴隆县| 临城县| 宁陕县| 始兴县| 萝北县| 咸阳市| 通化县| 盱眙县| 宣城市| 巴林右旗| 淮阳县|