1. 程式人生 > >表單提交和json提交

表單提交和json提交

背景

在前後端分離的開發組中,前端通常對自己程式碼組織的比較細緻,都會對AJAX,或者小程式API做封裝。而很多前端開發對後端介面要求的傳參 一頭霧水,後端開發人員對HTTP一知半解,傳參接收不到,說不清楚,互相推脫,誰誰應該改傳參方式。

HTTP協議中:Content-Type,估計是非常非常多的人弄不清楚。

本質上Content-Type 要麼就是 text/html要麼就是 json要麼就是 表單

本質上 非常簡單,但總是有人搞不清楚,總是在這個上面浪費時間。

JSON

Content-Typeapplication/json 的時候,HTTP POST請求資料必須是JSON的。
任何框架都必須遵守這個協議,如果不支援,則說明框架不完善,開發者可能知識比較片面。

例子:

HTTP POST

header:
Content-Type: "application/json"

body:
{
    "key1": value1,
    "key2": value2
}

其中整個JSON就是 引數本身,他沒有KEY,沒有名稱。key1 ,key2嚴格說只是屬性

表單

Content-Typex-www-form-urlencoded 的時候,POST 的請求資料必須是表單的。
甚至很多開發者印象中,引數就是個名字為key 值為value這種印象,這是非常膚淺的認識。

例子:

HTTP POST

header:
Content-Type: "x-www-form-urlencoded"
body: key1=value1&key2=value2

何為表單引數,就是以x-www-form-urlencoded為編碼的資料引數,其中key1 和 key2就是引數。整個內容就是為 以& 分隔的引數列表。

表單2

例子:這裡用Chrome的F12中Network類似的表示HTTP POST請求

HTTP POST

header:
Content-Type: "x-www-form-urlencoded"

body:
key1=value1
key2={"key3":value3, "key4": value4}

那這個其實也是表單!!!!!他的形式是表單裡面嵌套了一個JSON字串,作為其中的一個引數

弄清楚這個了,其實根本不需要為了傳參而爭論半天。

什麼情況應該用什麼傳參?

如果引數比較單一,只做GET查詢的時候,建議直接GET。URL上面就是表單引數,和POST的表單一模一樣。

如果引數還是比較單一,但是引數值太多了,很長很長的字串,用POST是毋庸置疑的。
這個時候,POST JSON和表單其實是一樣的都是在請求體裡面

如果引數是結構化的,用POST JSON,毋容置疑。

如果引數是結構化的,還需要AUTH,;例如帶個TOKEN,那麼:

  • 使用上面的表單2,偽JSON表單,這種情況的壞處就是JAVA後端的 Model解析比較彆扭,不太好建模。
  • 使用URL + 公共引數、Token,其餘引數放在Body,以POST JSON傳參,沒有壞處,好處就是後端做攔截器,或者Filter的時候比較統一明瞭,不需要在Model裡面涉及 公共引數。唯一的壞處就是,前端同學可能懶得弄。

小程式前端 與後端配合開發的經驗

前端封裝的框架,必須支援 公共引數追加到URL,並且可以以JSON傳參。
後端就可以依據以上的情況,靈活使用引數組織方式了,處理業務的程式碼專心接受引數,
攔截器直接通過URL獲取公共引數和Token,來做一些版本控制,身份認證等功能。

相關推薦

java post請求的提交json提交簡單小結

在java實現http請求時有分為多種引數的傳遞方式,以下給出通過form表單提交和json提交的引數傳遞方式: 1 public String POST_FORM(String url, Map<String,String> map,String encoding) throws Pa

提交json提交

背景在前後端分離的開發組中,前端通常對自己程式碼組織的比較細緻,都會對AJAX,或者小程式API做封裝。而很多前端開發對後端介面要求的傳參 一頭霧水,後端開發人員對HTTP一知半解,傳參接收不到,說不清楚,互相推脫,誰誰應該改傳參方式。HTTP協議中:Content-Type

js-form資料轉為json提交

JSON.stringify($('#categoryForm').serializeObject() /** * 自動將form表單封裝成json物件 */ $.fn.serializeObject = function() {

Axios傳參的兩種方式,資料json字串(Form DataRequest Payload)

第一種方式:Form Data Axios引數配置: 1、引入 import Qs from 'qs' 2、 return request({ headers: { 'Content-Type': 'application/x-www-form-

Python爬蟲之requests庫(三):傳送資料JSON資料

import requests 一、傳送表單資料 要傳送表單資料,只需要將一個字典傳遞給引數data payload = {'key1': 'value1', 'key2': 'value

【轉載】form的兩種提交方式,submitbutton的用法

按鈕 type ssid login false tex .get ons 轉載 1.當輸入用戶名和密碼為空的時候,需要判斷。這時候就用到了校驗用戶名和密碼,這個需要在jsp的前端頁面寫;有兩種方法,一種是用submit提交。一種是用button提交。方法一:在jsp的前端

織夢自定義新增訪客提交時間訪客IP+限制每天每個IP提交次數

織夢給自定義表單新增訪客提交時間 不需要在模板htm裡新增js或者其他程式碼,按下面步驟來即可。 1、後臺 - 核心 - 頻道模型 - 自定義表單 - 新增新欄位 提交時間 time 單行文字(varchar) 2、開啟 /plus/diy.php 找到 $fiel

【jQuery】jQuery的serializeArray封裝資料為JSON提交到SpringMVC伺服器

表單 設定表單的id,點選提交按鈕後,將表單id和URL作為引數呼叫sendJSON()函式 <form id="adressForm"> <table> <tr> &l

form的兩種提交方式,submitbutton的用法

1.當輸入使用者名稱和密碼為空的時候,需要判斷。這時候就用到了校驗使用者名稱和密碼,這個需要在jsp的前端頁面寫;有兩種方法,一種是用submit提交。一種是用button提交。 方法一: 在jsp的前端頁面的頭部插入一個js方法:  function checkUser(

Jquery 將序列化為Json物件.同時提交多個的引數

首先對某一表單進行Json物件序列化:  [javascript] view plain copy (function($){           $.fn.serializeJson=function(){               var se

form同步提交非同步提交

同步提交: html: <form id="form" method='"post" action="${ctx}/user/saveUser"> <input type=

通過jquery的serializearray處理資料成json格式,並提交到後臺處理

var params = $("#myform").serializeArray(); var values = {}; for (var item in params) { values[params[item].name] = params[item].value

jquery批量提交批量設定

批量設定表單的值 function setInfo(data){ //簡便方法 $('#info_form').find('[name]').each(function() {

JSP之——資訊圖片一起提交

// Check that we have a file upload request 檢查是否是表單檔案上請求 boolean isMultipart = ServletFileUpload.i

防止的重復提交

scrip als 判斷 spa 三種 再次 按鈕 將不 正常 場景有三種: 1:在網絡延遲的情況下讓用戶有時間點擊多次submit導致重復提交 2:表單提交後點擊“刷新”按鈕導致重復提交 3:提交後,點擊瀏覽器的後退然後再次提交 解決的思路有常用的幾種: 1、通過JS,提

Javascript控制回車鍵進行(form)提交(轉)

html urn enter text ctype ret put 焦點 cti 一、采用鉤子事件去捕獲 鍵盤事件有3個: keydown,keypress,keyup分別是按下,按著沒上擡,上擡鍵盤 。 $(document).keyup(function(ev

form多選框提交數據 服務器只能接受到一個數據

表單提交 form 多選 提交過去後表單中name相同的值會被後一個覆蓋,而不會被單獨識別出來。在name名稱後面加上‘[]’即可;如 name=‘user[]‘ 註意下面兩個教程的區別,我很想知道w3c怎麽讀取到的。等待指教; http://www.w3school.com.cn/tags/at

使用session防止進行重復提交

dig exc ati ges nproc 其他 延遲 odi 網絡 我們都知道可以通過js的方法來實現防止表單重復提交,但是js只適用於“在網絡延遲的情況下讓用戶有時間點擊多次submit按鈕導致表單重復提交” 的情況下進行操作, 那如果碰到&l

如何防止的重復提交

避免 表單 sdn 歷史 之前 detail 參考 原因 ali 表單重復提交是在多用戶Web應用中最常見、帶來很多麻煩的一個問題。有很多的應用場景都會遇到重復提交問題,比如: (1)點擊提交按鈕兩次。 (2)點擊刷新按鈕。 (3)使用瀏覽器後退按鈕重復之前的操作,導致重復

的重復提交,解決方案

alt window opened rip str -a color 機器碼 equal 表單的重復提交,解決方案: 第一種情況:在提交表單時,如果網速較差,可能會導致點擊提交按鈕多次: - 解決方法:點擊提交按鈕之後,使按鈕不可用。通過js完成: <script