使用jquery的ajax方法可以异步提交表单,成功后后台返回json数据,回调函数处理,可以不用刷新页面,达到异步的目的;

处理表单的数据可以用serialize()方法进行序列化,而如果提交的数据包括文件流的话,就需要使用 FormData对象:

不带文件的表单数据使用:var data = $(form).serialize();

带文件的表单数据使用:   var  data = new FormData($(form)[0]);

一、不上传文件的ajax提交数据:

1、用serialize()方法序列化form表单提交参数

html:form表单

 <form id="addForm" action="${pageContext.request.contextPath}/admin/saveAdd" method="post">
<input type="text" name="name" placeholder="请输入名字" />
<input type="password" name="password" placeholder="密码"/>
</form>
<button type="button" id="submitAdd">确认</button>

jquery 异步处理

  $("#submitAdd").click(function(){

          var targetUrl = $("#addForm").attr("action");
var data = $("#addForm").serialize();
$.ajax({
type:'post',
url:targetUrl,
cache: false,
data:data,
dataType:'json',
success:function(data){
alert('success');
},
error:function(){
alert("请求失败")
}
}) })

2、用data{}格式的方法提交data参数

html,form表单:

<form id="addForm" action="${pageContext.request.contextPath}/admin/saveAdd" method="post">
<input type="text" id="name" name="name" placeholder="请输入名字" />
<input type="password" id="password" name="password" placeholder="密码"/>
</form>
<button type="button" id="submitAdd">确认</button>

Jquery 异步处理:

$("#submitAdd").click(function(){

          var targetUrl = $("#addForm").attr("action");
var userName =$("#name").val();
var pd= $("#passwrod").val();
//创建数组
var array = new Array();
//往数组添加数据
array.push('hello');
array.push('world');
$.ajax({
type:'post',
url:targetUrl,
cache: false,
data:{"name":userName,"password":pd,"array[]":array}, //注意,传递数组参数时,参数名需要加上[],如 "array[]",否则后台获取不了
dataType:'json',
success:function(data){
alert('success');
},
error:function(){
alert("请求失败")
}
}) })

二、上传文件的ajax提交数据:

1、用<form>表单来构建FormData对象:

 html:form表单

 注意:有文件上传的form表单需要在<form>标签里加入 enctype="multipart/form-data"属性 :

<form id="addForm" action="${pageContext.request.contextPath}/admin/saveAdd" method="post"enctype="  multipart/form-data">
<input type="text" name="name" placeholder="请输入名字" />
<input type="password" name="password" placeholder="密码"/>
<input type="file" name="avatar" />
</form>
<button type="button" id="submitAdd">确认</button>

jquery 异步处理

$("#submitAdd").click(function(){

          var targetUrl = $("#addForm").attr("action");
var data = new FormData($( "#addForm" )[0]);
$.ajax({
type:'post',
url:targetUrl,
cache: false, //上传文件不需缓存
processData: false, //需设置为false。因为data值是FormData对象,不需要对数据做处理
contentType: false, //需设置为false。因为是FormData对象,且已经声明了属性enctype="multipart/form-data"
data:data,
dataType:'json',
success:function(data){
alert('success');
},
error:function(){
alert("请求失败")
}
}) })

2、如果不用<form>表单构建FormData对象的处理方法如下:

html:没有form表单

<div id="uploadFile">
<input id="file" name="avatar" type="file"/>
<button id="upload" data-url="/admin/upload" type="button">上传头像</button>
</div>

jquery异步处理:

$("#upload").click(function(){

          var targetUrl = $(this).attr("data-url");
var data = new FormData();
//FormData对象加入参数
data.append('file', $('#file')[0].files[0]); //'file' 为参数名,$('#file')[0].files[0])获取上传的文件,如果需上传多个文件,要在<input>标签加上属性multiple
$.ajax({
type:'post',
url:targetUrl,
cache: false,
processData: false,
contentType: false,
data:data,
dataType:'json',
success:function(data){
alert('success');
},
error:function(){
alert("请求失败")
}
}) })

补充说明:

注意:需要调用函数返回值时,需要为ajax设置 async : false,否则ajax返回值将异步,导致函数返回不到ajax里面的返回值;

具体如下:

 //校验验证码
function validateCode(){
var result ;
var validateCode = $("#validateCode").val();
var validateCodeUrl =$("#validateCode").attr("data-validate");
$.ajax({
type:'get',
url :validateCodeUrl,
data:{'validateCode':validateCode},
dataType:'json',
async : false,
success:function(flag){
if(flag.valid==true){
$("#validateCode").removeClass("warn-border");
$("#small-warn").remove();
result =true;
return result ;
}
var tag ='<small id="small-warn" class="small-warn"><i class="fa fa-close"></i>请输入正确的验证码</small>'
$("#validateCode").addClass("warn-border");
$(".validate-img-code").after(tag);
result =false;
return result ;
},
error:function(){
alert("请求失败!")
}
})
return result ;
}

最新文章

  1. dede使用方法----实现英文版的搜索功能
  2. 服务发现之 Etcd VS Consul
  3. 深入剖析 redis 主从复制
  4. C# Remoting的一个简单例子
  5. qemu-kvm简单使用
  6. http 服务
  7. python下如何处理windows的路径名
  8. hdu 2846
  9. android getDecorView()的作用
  10. SSIS 延迟验证(DelayValidation)
  11. 2017&quot;百度之星&quot;程序设计大赛 - 复赛1005&amp;&amp;HDU 6148 Valley Numer【数位dp】
  12. Vue项目搭建及原理三
  13. 第七周助教工作总结——NWNU李泓毅
  14. 简析服务端通过geotools导入SHP至PG的方法
  15. Java高并发秒杀API之Service层
  16. centos时区设置
  17. 【java】浅谈for循环
  18. delphi 合并两个 Wav 文件流的函数
  19. SpringMVC由浅入深day02_1课程安排_2包装类型pojo参数绑定_3集合类型绑定
  20. D. Makoto and a Blackboard(积性函数+DP)

热门文章

  1. Linux配置自动发送邮件
  2. September 24th 2017 Week 39th Sunday
  3. Spring Boot REST
  4. POI导出excel,本地测试没问题,linux测试无法导出
  5. Nginx总结.md
  6. virtualbox+vagrant学习-2(command cli)-8-vagrant Package命令
  7. VMware虚拟机安装Mac OS X
  8. 集合之Map总结
  9. Spring4自动装配(default-autowire)
  10. VMware 虚拟机安装