angular做爲Single Page Application推薦的交互方式固然是基於json的ajax調用。但今天要說的是當你不幸工做在一個遺留或者不可控制的服務上,而這服務是基於非json提交方式(或許是常規表單(form)提交,或者其餘自定義數據格式),那麼咱們只能改變ng內部$http默認request/response格式轉化方式。ajax
所幸的是ng $http給咱們提供了多種可用方式轉化數據格式(下面demo將以form提交方式爲例):json
***對於部分單獨的http request設置:app
對於http ajax方式最後一個參數都是關於http的配置信息,其中包括一項transformRequest,咱們能夠利用transformRequest在ajax發送數據以前改變數據的格式,例以下邊的demo:ide
$http.post("/url", { id: 1, name: "greengerong" }, { transformRequest: function(request) { return $.param(request); } });
這裏利用jQuery的$.param進行表單提交方式的格式轉化,因此咱們可以看見的request body 爲:post
id=1&name=greengerong
online demo;url
***對於整個app的http request設置:spa
若是咱們須要對整個http的數據轉化格式進行設置,那麼能夠選用在config階段對$httpProvider默認行爲進行設置:code
angular.module("app", []) .config(["$httpProvider", function($httpProvider) { $httpProvider.defaults.transformRequest = [ function(request) { return $.param(request); } ]; } ]);
這樣咱們就能夠輕易的轉化爲form提交方式。orm
一樣$http也爲咱們提供了transformResponse方式,咱們也能夠建立本身的response轉化,好比json以前加入自定義前綴防止json array攻擊等等。blog