淺談PHP前后端傳參常見(jiàn)的幾種方式

在Web開(kāi)發(fā)里面,有前后端之分腋颠,它們之間的交互主要通過(guò)傳參的方式涮坐,但是這個(gè)傳參也分幾種形式,比如說(shuō)Form表單提交映屋、Ajax提交...今天我就在這里總結(jié)一下開(kāi)發(fā)中常見(jiàn)的幾種形式:

1. Form表單提交

這種方式是最原始最常見(jiàn)的方式苟鸯,提交的時(shí)候也有可能是通過(guò)js觸發(fā),其請(qǐng)求頭Content-Type為: application/x-www-form-urlencoded棚点,示例如下:

前端代碼:
<body>
    <form action="backend.php" method="post">
        <label for="name">姓名:</label>
        <input type="text" id="name" name="name">
        <label for="name">年齡:</label>
        <input type="text" id="age" name="age">
        <input type="submit" value="提交">
    </form>
</body>
后端接收:
<?php
var_dump($_POST['name']);
var_dump($_GET['age']);
var_dump($_REQUEST['age]);
請(qǐng)求頭:

這種提交方式也是ajax默認(rèn)的提交方式,請(qǐng)求參數(shù)是以key-value鍵值對(duì)的形式傳遞到后端,在PHP里面通$_POST等超全局變量就可以獲取到,簡(jiǎn)單實(shí)用早处。其未經(jīng)解析的原始的數(shù)據(jù)其實(shí)是:name=PHP&age=25


2. JSON形式提交

這種形式,需要設(shè)置一下請(qǐng)求頭Content-Type為application/json瘫析,實(shí)例如下:

前端代碼:
 $.ajax({
            type: 'POST',
            url: "backend.php",
            data: {
                'name': 'hello',
                'age': 15,
            },
            contentType: 'application/json',
            dataType: "json",
            success: function (data) {
                console.log(data);
            }
        });
請(qǐng)求頭:

從上面的截圖可以看到砌梆,請(qǐng)求參數(shù)那里變成Request Payload,雖然格式上看上去和之前form提交差不多贬循,但是這時(shí)候如果后臺(tái)用$_POST這類方法是無(wú)法獲取的咸包,需要換一種方式:

$input = file_get_contents('php://input');

上面這種方式獲取到的內(nèi)容是字符串: name=Jun&age=15,在這個(gè)例子里面反而不容易處理了杖虾,實(shí)際上采用json這種方式提交的參數(shù)的話烂瘫,一般都是把需要的數(shù)據(jù)封裝成json格式提交,在js里面就是把數(shù)據(jù)放到對(duì)象里面奇适,然后序列化:

        var data = {
            'name': 'Jun',
            'age': 15,
        };
        $.ajax({
            type: 'POST',
            url: "backend.php",
            data: JSON.stringify(data),
            contentType: 'application/json',
            dataType: "json",
            success: function (data) {
                console.log(data);
            }
        });

這是再查看請(qǐng)求頭:



可以看到參數(shù)變成json格式坟比,這時(shí)候PHP后端就可以采用json_decode函數(shù)去獲取參數(shù):

$input = json_decode(file_get_contents('php://input'), true);

3.文件上傳

一般上傳圖片等各種文件的時(shí)候用的到,Content-Type是 multipart/form-data

請(qǐng)求頭類似如下:

------WebKitFormBoundary63FiWN3UoYxd8OT6
Content-Disposition: form-data; name="UploadFile"; filename="QQ截圖20170925101502.png"
Content-Type: image/png


------WebKitFormBoundary63FiWN3UoYxd8OT6
Content-Disposition: form-data; name="sid"

sid
------WebKitFormBoundary63FiWN3UoYxd8OT6
Content-Disposition: form-data; name="fun"

add
------WebKitFormBoundary63FiWN3UoYxd8OT6
Content-Disposition: form-data; name="mode"

4. 總結(jié)

這幾種方式功能上說(shuō)沒(méi)什么區(qū)別嚷往,都能實(shí)現(xiàn)數(shù)據(jù)的提交葛账,大家選擇自己喜歡的方式就行,最重要的是前后端協(xié)調(diào)好, 雖然這里后端是以PHP為例皮仁,但是其他語(yǔ)言也是大同小異籍琳。最后,再說(shuō)一下數(shù)組提交贷祈,這個(gè)倒不是新的提交方式巩割,我這里是指遇到那種一個(gè)字段提交多個(gè)數(shù)據(jù)的情況,比如說(shuō)刪除多個(gè)文章付燥,一般前端需要傳多個(gè)id宣谈,舉例子字段名字叫ids,一般有這2種方案:

1. 逗號(hào)相隔

這樣傳參键科,后端獲取到之后是一個(gè)字符串闻丑,在PHP里面可以用explode這樣的函數(shù)去把字符串拆分成數(shù)組,非常方便勋颖,當(dāng)然你也可以選擇其他分隔符嗦嗡,比如說(shuō)“-”,“+”等字符饭玲。

2. JSON形式

這就是文中說(shuō)的第二種方式侥祭,把id放在數(shù)組里面以json方式傳到后臺(tái),這樣后臺(tái)可以直接獲取到一個(gè)數(shù)組.


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市矮冬,隨后出現(xiàn)的幾起案子谈宛,更是在濱河造成了極大的恐慌,老刑警劉巖胎署,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吆录,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡琼牧,警方通過(guò)查閱死者的電腦和手機(jī)恢筝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)巨坊,“玉大人撬槽,你說(shuō)我怎么就攤上這事≈耗欤” “怎么了侄柔?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鼓寺。 經(jīng)常有香客問(wèn)我勋拟,道長(zhǎng),這世上最難降的妖魔是什么妈候? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任敢靡,我火速辦了婚禮,結(jié)果婚禮上苦银,老公的妹妹穿的比我還像新娘啸胧。我一直安慰自己,他們只是感情好幔虏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布纺念。 她就那樣靜靜地躺著,像睡著了一般想括。 火紅的嫁衣襯著肌膚如雪陷谱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天瑟蜈,我揣著相機(jī)與錄音烟逊,去河邊找鬼。 笑死铺根,一個(gè)胖子當(dāng)著我的面吹牛宪躯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播位迂,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼访雪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼详瑞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起臣缀,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坝橡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后肝陪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體驳庭,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刑顺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年氯窍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹲堂。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狼讨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柒竞,到底是詐尸還是另有隱情政供,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布朽基,位于F島的核電站布隔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稼虎。R本人自食惡果不足惜衅檀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霎俩。 院中可真熱鬧哀军,春花似錦、人聲如沸打却。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柳击。三九已至猿推,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捌肴,已是汗流浹背蹬叭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哭靖,地道東北人具垫。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像试幽,于是被迫代替她去往敵國(guó)和親筝蚕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卦碾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)起宽,斷路器洲胖,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 北京的深秋,加上深夜坯沪,真的冷绿映。凍得瑟瑟發(fā)抖的我們,在地鐵口告別腐晾。 她說(shuō)叉弦,我是一個(gè)有著童心的姐姐;我說(shuō)藻糖,她是一個(gè)早已...
    茉莉大大閱讀 140評(píng)論 0 0
  • 在整個(gè)水滸當(dāng)中有很多可悲的片段,曾經(jīng)記載過(guò)幾個(gè)可悲的女人的命運(yùn)洋满,比較悲催的有秦明的夫人晶乔,秦明在山寨中被灌醉酒時(shí),他...
    2ce89d4b6d65閱讀 587評(píng)論 0 13
  • 早晨沿著小巷子走了一圈牺勾,沿路兩旁開(kāi)滿了粉色小花的紫羅蘭正罢。 記得還是年幼時(shí),隔壁酷愛(ài)園藝的發(fā)小哥哥第一次教我認(rèn)識(shí)了紫...
    青竹風(fēng)吟閱讀 722評(píng)論 6 4