angular使用post get向後台傳參的問題

2022-05-07 07:48:10 字數 2202 閱讀 4530

一、問題的**

那麼為什麼使用get形式就可以傳參呢?在書中我發現這樣的一句話:」這個鍵的值是乙個字串map或物件,會被轉換成查詢字串追加在url後面。如果值不是字串,會被json序列化」,可以理解為在get中引數的傳遞是直接追加在url後面的,那麼此時引數形式會被轉化成id=1&name=jyy追加在url後面。那麼在後台中就可以直接獲取到了。例如:

})在後台(php)輸入echo $_get[id]就可以正常顯示了。

那麼接下來就研究怎麼解決post的傳值了。

二、問題的解決

1. 修改請求頭

第一種方法就是在ng中修改請求頭將json格式改成x-www-form-urlencoded。修改方法點選即可檢視。

值得注意的是,在使用第二種方法時,可以修改put,get,post,common的傳參格式。因此修改哪種方式,就只能使用這種方式才能在後台得到引數。這篇博文寫到使用common進行設定可以同時使用put、get、post進行傳參。但是在我的實際操作中發現對common進行修改並不能使用post進行傳參,而只有設定了post的請求頭才可以。

另外由於在ng中的引數都是使用json格式表達,因此需要引入jquery,使用其$.param("引數列表的json格式")進行序列化表示。

首先使用修改post請求頭。具體**如下:

})此時在後台中(使用的是php),輸入echo $_post[id],就會顯示。而debug其中顯示的請求頭正是我們設定的。

2.在後台進行解決

由於使用的是php,所以暫時用php的方法解決。在這個方法中,我們不修改請求頭。因為get傳值是正常的,那麼,只要能夠得到post的值就好。既然ng向後台傳值了,即便是因為請求頭不同,但是總會傳過來什麼的吧,既然能夠傳過來,就先獲取它。這個時候使用$globals['http_raw_post_data']將這個傳過來的東西顯示出來。那麼這個$globals['http_raw_post_data']是什麼呢?在網上查詢得知$http_raw_post_data 變數包含有原始的 post 資料。此變數僅在碰到未識別 mime 型別的資料時產生,php不能識別的content-type型別的時候,會將http請求包中相應的資料填入變數$http_raw_post_data。就是說現在這個請求頭雖然是有衝突的,但是卻能夠顯示出來。如下:

此時顯示出來的東西是:。發現這個結果是正確顯示了。那麼直接對齊進行操作不就可以了?好吧,那就先看看是什麼型別:使用gettype()得到的是string,就是說他是個json字串。那就使用json_decode()轉換,發現會報錯。好吧,放棄使用這個方法。

但是此時還有另外的方法。使用file_get_contents("php://input"),這個方法中 php://input 是個可以訪問請求的原始資料的唯讀流。 post 請求的情況下,最好使用 php://input 來代替 $http_raw_post_data,因為它不依賴於特定的 php.ini 指令。 此時這個方法就可以返回傳過來的引數了。**如下:

$a = json_decode(file_get_contents("php://input"));

echo

$a->id;

結果輸出正確的id。

angular基本使用

angular 有很多裝飾器,它們負責把元資料附加到類上,以了解那些類的設計意圖以及它們應如何工作。component裝飾器 宣告乙個元件時,在元件類的之上要用 component裝飾器來告知angular這是乙個元件 component ngmodule是乙個裝飾器函式,它接收乙個用來描述模組屬性...

Angular 基本使用

基本介紹 1 angularjs是乙個框架 諸多類庫的集合 以資料和邏輯做為驅動 核心 2 angularjs有著諸多特性,最為核心的是 模組化 雙向資料繫結 語義化標籤 依賴注入等。模組化 enpp 2 定義模組 angularjs提供了乙個全域性物件angular,在此全域性物件下存在若干的方法...

angular元件使用

1.定義子元件 component export class productdetail 新增裝飾器說明是乙個元件,selector指明了該元件使用的標籤名,templeteurl指定元件模板即html,styleurls指定樣式模板。父元件使用該子元件 父元件html 2.父元件向子元件傳值 1 ...