ajax获得表单值的俩种方法

1. FormData

1.1 介绍

FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。 在使用ajax提交时,使用FormData对象可以减少拼接queryString的工作量。同时FromData可以接收到二进制文件(可以用来做异步上传文件),serialize只能序列化简单的数据。

1.2 用于文件上传时

文件上传时会有坑,建议大家好好看我这里写的。

form表单添加 enctype="multipart/form-data"

<form enctype="multipart/form-data" method="post" id="fileinfo">
  <label>图片:</label>
  <input type="file" name="file" />
  <input type="submit" value="提交" />
</form>

ajax必须加入下面这俩个配置

processData: false, 
contentType: false,
var formData = new FormData($("#fileinfo")[0]); 
$.ajax({
	  dataType: "json",
      type: "post", // 提交方式 get/post
      url:  '/dog/saveOrUpdate.action', // 需要提交的 url
      data: formData,
      processData: false,
      contentType: false,
      success: function(data) {
      
      }     
});

1.3 注意参数

new FormData的参数是一个DOM对象,而非jQuery对象
我们通过[index]的方法,来得到相应的DOM对象。

var formData = new FormData($("#fileinfo")[0]); 

1.4 用法

下面通过一个保存狗的小例子来演示这个用法。

1.4.1 html 代码

<form id="itemForm" enctype="multipart/form-data">
    <div class="form-body">
	    <div class="form-group">
		 	<label>流浪狗名称</label>
		     <input id="dogName" name="dogName" type="text" value="" />
		</div>
		<div class="form-group">
          	<label>流浪狗年龄</label>
            <input id="dogAge" name="dogAge" type="text" value="" />
		</div>
	</div>
		
	<div class="form-actions">
        <button type="submit" class="btn green-jungle">提  交</button>
        <button type="reset" class="btn grey-salsa btn-outline">取  消</button>
	</div>
</form>

1.4.2 ajax 代码

var itemForm = $('#itemForm');
var formData = new FormData($("#itemForm")[0]); 
$.ajax({
	dataType: "json",
	// 提交方式 get 或 post
    type: "post",
    // 需要访问的 Servlet 的映射路径 urlPatterns
    url:  '/saveDog', 
    data: formData,
    processData: false,
    contentType: false,
    success: function(data) {
    }
});

1.4.3 Servlet 代码

/**
 * Servlet3.0 注解 WebServlet 用来描述一个 Servlet。
 * 属性 name 描述 Servlet 的名字,可选。
 * 属性 urlPatterns 定义访问的 URL。(定义访问的 URL 是必选属性)。
 */
@WebServlet(name="SaveDogServlet", urlPatterns="/saveDog")
public class SaveDogServlet extends HttpServlet{
	public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
	
		// 防止中文乱码
		request.setCharacterEncoding("utf-8");
        // 获取前端表单通过 ajax 传来的 dogName
        String dogName = request.getParameter("dogName");          
        // 获取前端通过 ajax 传来的 dogAge
        String dogAge = request.getParameter("dogAge");    
        // 打印前端通过 ajax 传来的数据
        System.out.println("dogName: " + dogName);
        System.out.println("dogAge: " + dogAge);
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
	            throws ServletException, IOException {
	        doPost(request, response);
	}
}

小知识点

这种通过 @WebServlet 注解配置 Servlet 类似于我们在 web.xml 里这么配置

<servlet>  
    <servlet-name>SaveDogServlet</servlet-name>  
    <servlet-class>com.ypf.web.servlet.SaveDogServlet</servlet-class>  
</servlet>  
<!-- servlet 映射关系配置 -->  
<servlet-mapping>  
    <servlet-name>SaveDogServlet</servlet-name>  
    <url-pattern>/saveDog</url-pattern>  
</servlet-mapping>  

2. serialize

2.1 介绍

serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。

你可以选择一个或多个表单元素(比如 input 及/或 文本框),或者 form 元素本身。

序列化的值可在生成 AJAX 请求时用于 URL 查询字符串中。

使用serialize
这里写图片描述
使用serialize
这里写图片描述

2.2 用法

这里只列举 ajax 代码,其他代码和上述代码完全相同。

2.2.1 ajax

// 获取form表单的jquery对象
var itemForm= $('#itemForm');
$.ajax({
	  dataType: "json",
      // 提交方式 get 或 post
      type: "post", 
      // 需要访问的 Servlet 的映射路径 urlPatterns
      url:  "/saveDog", 
      data: itemForm.serialize(),
      success: function(data) {
       
      }
});

3. 相关视频推荐

JavaWeb视频教程(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)

https://www.bilibili.com/video/av29086718?from=search&seid=10477065192336901773

Servlet入门和Tomcat

https://www.bilibili.com/video/av44994659/?p=1

4. 欢迎关注

欢迎关注博主公众号。在这里你可以收获一个java后端学习的环境,一个问答的学习环境。
这里写图片描述

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要在 Django 后端获取前端 Vue 数据,有以下几方法: 1. 发送 Ajax 请求 前端通过 Ajax 请求将数据发送到 Django 后端,Django 后端接收请求并处理数据。 Vue 代码: ``` axios.post('/api/data', { data: 'hello world' }) ``` Django 代码: ``` from django.http import JsonResponse def data(request): data = request.POST.get('data') # 处理数据 return JsonResponse({'message': 'success'}) ``` 2. 表单提交 前端通过表单提交将数据发送到 Django 后端,Django 后端接收请求并处理数据。 Vue 代码: ``` <form method="post" action="/api/data"> <input type="hidden" name="data" value="hello world"> <button type="submit">提交</button> </form> ``` Django 代码: ``` from django.http import JsonResponse def data(request): data = request.POST.get('data') # 处理数据 return JsonResponse({'message': 'success'}) ``` 3. WebSocket 使用 WebSocket 实时通信,前端通过 WebSocket 将数据实时发送到 Django 后端,Django 后端接收请求并处理数据。 Vue 代码: ``` const socket = new WebSocket('ws://localhost:8000/ws/') socket.onopen = () => { socket.send('hello world') } socket.onmessage = (event) => { // 处理数据 } ``` Django 代码: ``` import asyncio import websockets async def echo(websocket, path): async for message in websocket: # 处理数据 await websocket.send('success') start_server = websockets.serve(echo, 'localhost', 8000) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() ``` 需要注意的是,WebSocket 需要使用第三方库 `websockets`,需要安装。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值