>  기사  >  웹 프론트엔드  >  data_json 양식을 제출하기 위한 JSON 인코딩 형식에 대한 심층 분석

data_json 양식을 제출하기 위한 JSON 인코딩 형식에 대한 심층 분석

WBOY
WBOY원래의
2016-05-16 15:52:551114검색

JSON 인코딩 형식으로 양식 데이터를 제출하는 것은 HTML5가 WEB의 발전과 발전에 기여한 또 하나의 중요한 요소입니다. 과거에는 HTML 양식 데이터가 키-값 방식을 통해 서버 측에 전송되었습니다. 데이터 구성 관리가 부족합니다. 형식이 매우 원시적입니다. 양식 데이터를 JSON 형식으로 제출하는 방식이 새롭게 등장한 방식은 양식의 모든 데이터를 특정 사양에 따라 JSON 형식으로 변환한 후 서버에 전송하는 방식입니다. 서버가 수신한 데이터는 직접 사용할 수 있는 정규화된 JSON 코드입니다.

JSON 형식으로 양식 제출을 선언하는 방법

모든 사람은 양식을 사용하여 파일을 업로드하는 방법에 익숙해야 합니다. HTML의 양식 태그에 enctype="multipart/form-data" 문을 추가해야 합니다. 파일 업로드 모드. JSON 형식 제출 양식의 선언은 다음과 유사합니다: enctype='application/json'.

이전 브라우저와의 호환성

JSON 형식으로 양식을 제출하는 것은 HTML5의 매우 새로운 사양입니다. 이러한 사양을 구현하는 최신 브라우저만이 enctype='application/json'의 의미를 인식하고 양식 데이터를 JSON 형식으로 올바르게 패키징할 수 있습니다. 일부 오래된 브라우저와 이러한 표준을 아직 구현하지 않은 브라우저의 경우 enctype='application/json'이 나타내는 내용을 인식할 수 없으므로 양식의 enctype이 자동으로 application/x-www-form-urlencoded 기본 인코딩으로 저하됩니다. . 서버측 코드는 enctype 값에 따라 데이터 수신 방법을 결정할 수 있습니다.

JSON 인코딩 형식의 제출 양식 형식 예

예시 1 기본 사용법

<form enctype='application/json'>
 <input name='name' value='Bender'>
 <select name='hind'>
  <option selected>Bitable</option>
  <option>Kickable</option>
 </select>
 <input type='checkbox' name='shiny' checked>
</form>

// 生成的Json数据是
{
 "name":  "Bender"
, "hind":  "Bitable"
, "shiny": true
}

예시 2 양식에 동일한 이름의 양식 필드가 여러 개 있는 경우 JSON 배열로 인코딩합니다.

<form enctype='application/json'>
 <input type='number' name='bottle-on-wall' value='1'>
 <input type='number' name='bottle-on-wall' value='2'>
 <input type='number' name='bottle-on-wall' value='3'>
</form>

// 生成的Json数据是
{
 "bottle-on-wall":  [1, 2, 3]
}

예시 3 양식 필드 이름이 배열로 나타나는 복잡한 구조

<form enctype='application/json'>
 <input name='pet[species]' value='Dahut'>
 <input name='pet[name]' value='Hypatia'>
 <input name='kids[1]' value='Thelma'>
 <input name='kids[0]' value='Ashley'>
</form>

// 生成的Json数据是
{
  "pet": {
    "species": "Dahut"
  ,  "name":   "Hypatia"
  }
,  "kids":  ["Ashley", "Thelma"]
}

예시 4 위 예시에서 누락된 배열 번호 값은 null로 대체됩니다.

<form enctype='application/json'>
 <input name='hearbeat[0]' value='thunk'>
 <input name='hearbeat[2]' value='thunk'>
</form>

// 生成的Json数据是
{
  "hearbeat":  ["thunk", null, "thunk"]
}

예시 5 다중 배열 중첩 형식, 중첩 수준 무제한

<form enctype='application/json'>
 <input name='pet[0][species]' value='Dahut'>
 <input name='pet[0][name]' value='Hypatia'>
 <input name='pet[1][species]' value='Felis Stultus'>
 <input name='pet[1][name]' value='Billie'>
</form>

// 生成的Json数据是
{
 "pet": [
  {
   "species": "Dahut"
  , "name":  "Hypatia"
  }
 , {
   "species": "Felis Stultus"
  , "name":  "Billie"
  }
 ]
}

예제 6 배열의 차원 제한은 정말 없습니다!

<form enctype='application/json'>
 <input name='wow[such][deep][3][much][power][!]' value='Amaze'>
</form>

// 生成的Json数据是
{
 "wow": {
  "such": {
   "deep": [
    null
   , null
   , null
   , {
     "much": {
      "power": {
       "!": "Amaze"
      }
     }
    }
   ]
  }
 }
}

예시 7 파일 업로드

<form enctype='application/json'>
 <input type='file' name='file' multiple>
</form>

// 假设你上传了2个文件, 生成的Json数据是:
{
 "file": [
  {
   "type": "text/plain",
   "name": "dahut.txt",
   "body": "REFBQUFBQUFIVVVVVVVVVVVVVCEhIQo="
  },
  {
   "type": "text/plain",
   "name": "litany.txt",
   "body": "SSBtdXN0IG5vdCBmZWFyLlxuRmVhciBpcyB0aGUgbWluZC1raWxsZXIuCg=="
  }
 ]
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.