码迷,mamicode.com
首页 > 其他好文 > 详细

表单提交数据格式form data

时间:2019-01-16 20:36:27      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:text   自动   展示   元素   jquer   png   sub   textarea   member   

前言:

最近遇到的最多的问题就是表单提交数据格式问题了。

常见的三种表单提交数据格式,分别举例说明:(项目是vue的框架)

1.application/x-www-form-urlencoded

提交表单方法,js代码如下:

submitForm() {
  let data = ‘title="标题"&content="内容"&pic[]="image1"&pic[]="image2"&pic[]="image3"‘
  axios({
    url: ‘<{url action=topc_ctl_member_article@publishArticle}>‘,
    method: ‘POST‘,
    data: data,
    headers: {
      ‘Content-Type‘: ‘application/x-www-form-urlencoded‘
    }
  }).then(res => {
    console.log(res)
  })
}

请求发送成功,看network headers信息,如图

技术分享图片

这里显示的是Form Data,数据格式如图

这是一个基本的示例。但是在项目中,我们的表单数据往往不是这么写死的。我们需要收集数据。收集数据的方式有几种。

默认表单提交时会自动收集数据,这个不说了。我们更多的是要走ajax提交。

1.new FormData()对象保存表单数据

Html代码:

<form ref="publishForm" action="">
    <input type="text" v-model="publishFormData.title" name="title" placeholder="请输入标题">
    <textarea name="content" id="" v-model="publishFormData.content" placeholder="这一刻想说什么...">        
    </textarea>
    <input hidden type="text" name="pics[]" :value="item.url">
    <input hidden type="text" name="shop_id" :value="publishFormData.shop_id">
    <input hidden type="text" name="item_id" :value="publishFormData.item_id">
    <a href="javascript:;" class="btn-publish" @click="submitForm">发布文章</a>
</form>

此段代码只展示关键内容,其余都省略了。。

js代码,vue methods里面:

submitForm() {
  let data = new FormData(this.$refs.publishForm)
  axios({
    url: ‘<{url action=topc_ctl_member_article@publishArticle}>‘,
    method: ‘POST‘,
    data: data,
    headers: {
      ‘Content-Type‘: ‘application/x-www-form-urlencoded‘
    }
  }).then(res => {
    console.log(res)
  })
}

在new FormData()里面传入dom元素,就能像默认提交表单那样收集到数据。不过注意,每个框架获取dom元素的方法不一样。

以前用jquery,是这样写的

let data = new FormData($(‘form‘))

vue获取dom,用$refs

let data = new FormData(this.$refs.publishForm)

 

network headers 信息如下:

技术分享图片

这里奇怪了,设置了 ‘Content-Type‘: ‘application/x-www-form-urlencoded‘ 竟然无效,还是显示multipart/form-data,莫非FormData对象有强制设置content-type功能??

 

2.multipart/form-data

据说表单上传文件时需要使用这种格式

 

3.application/json

Axios默认请求头类型是application/json

js代码如下:

submitForm() {
  let data = {
    title: ‘标题‘,
    content: ‘内容‘,
    pics: [‘image1‘, ‘image2‘, ‘image3‘]
  }
  axios({
    url: ‘<{url action=topc_ctl_member_article@publishArticle}>‘,
    method: ‘POST‘,
    data: data,
    headers: {
      ‘Content-Type‘: ‘application/json‘
    }
  }).then(res => {
    console.log(res)
  })
}

network headers 如图:

技术分享图片

 

表单提交数据格式form data

标签:text   自动   展示   元素   jquer   png   sub   textarea   member   

原文地址:https://www.cnblogs.com/basic0001/p/10279012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!