欢迎来到元素模板ys720.com,本站提供专业的织梦模板PBOOTCMS模板网站模板网站修改/网站仿站
当前位置:主页 > 程序教程 > 其他教程 >
其他教程

jq form表单,formdata对象,实现文件上传

(元素模板) / 2022-10-12 20:48

form表单属性

action属性:提交表单时,向何处发送表单数据
target属性:在何处打开url
_blank 在新窗口打开
_self 在同一个窗口打开 默认
_parent
_top
method属性: 以何种方式把表单数据提交到 action url GET/POST
enctype属性: 发送表单数据之前如何对数据进行编码——主要用于上传图片(post请求)
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。(很少用)

 

实例代码:

<form action="/login"  method="get">
    <input type="text" name="email" id="">
    <br/>
    <input type="password" name="pass">
    <br/>
    <input type="submit" value="提交">
</form>

form 只是用来获取数据 ajax发送请求
监听表单的提交事件:
第一种

$('#f1').submit(function(){ alert('监听到表单的提交事件') })

第二种

$('#f1').on('submit',function(e){

    alert('监听到表单的提交事件')

    // 阻止默认行为(默认提交)

    e.preventDefault()



    // 快速获取表单的值(不用再.value了)

    var data = $(this).serialize()

    console.log(data)

  })

FormData对象

为了方便表单处理,HTML5新增了一个FormData对象,可以模拟表单操作

// 1创建FormData对象

var fd = new FormData()

// 2 调用append函数,向fd中追加数据

fd.append('username','zs');

fd.append('pwd',"12345");



 var xhr = new XMLHttpRequest()

 xhr.open('POST','http://www.liulongbin.top:3006/api/formdata');

 xhr.send(fd)



 xhr.onreadystatechange = function(){

   if(xhr.readyState === 4 && xhr.status ===200){

     console.log(JSON.parse(xhr.responseText))

   }

 }

 HTML代码

  <form id="form1">

   <input type="text" name="username" autocomplete="off">

   <br/>

   <input type="password" name="pwd" >

   <br/>

   <button type="submit">提交</button>

  </form>

JQ代码

// 1 dom操作获取form表单元素

var form = document.querySelector("#form1");

form.addEventListener('submit',function(e){

  // 阻止表单的默认行为

  e.preventDefault();

  // 创建FormData 快速获取到form表单中的数据

  var fd = new FormData(form);

  var xhr = new XMLHttpRequest()

  xhr.open('POST','http://www.liulongbin.top:3006/api/formdata');

  xhr.send(fd)

  xhr.onreadystatechange = function(){

    if(xhr.readyState === 4 && xhr.status ===200){

      console.log(JSON.parse(xhr.responseText))

    }

  }

})

主要还是用来上传文件

上传文件

XMLHttpRequest对象,不仅可以发送文本信息,还可以上传文件

  1:定义ui结构

  2:验证是否选择了文件

  3:向FormData中追加文件

  4:使用xhr发起上传文件的请求

  5:监听onreadystatechange事件

<!-- 1文本选择器 -->

<input type="file" id="file1">

<!-- 2上传文件按钮 -->

<button id="btnUpload">上传文件</button>

<hr/>

<!-- img显示上传成功后的图片 -->

<img src="" id="img" alt="">

JQ代码

// 1获取文件上传按钮

var btn = document.querySelector("#btnUpload");

// 绑定事件

btn.addEventListener('click',function(){

    // 3获取用户选择的文件列表

    var files = document.querySelector("#file1").files;

    console.log(files,0)

    // 验证是否选择了文件

    if(files.length <= 0){

      return alert("请选择要上传的文件");

    }

    var fd = new FormData();

    // 将用户选择的文件添加到FormData中

    fd.append('avatar',files[0]);

    var xhr = new XMLHttpRequest()

    xhr.open('POST','http://www.liulongbin.top:3006/api/upload/avatar');

    xhr.send(fd)

    xhr.onreadystatechange = function(){

      if(xhr.readyState === 4 && xhr.status ===200){

        // console.log(JSON.parse(xhr.responseText))

        var data = JSON.parse(xhr.responseText);

        if(data.status===200){

         document.querySelector('#img').src ='http://www.liulongbin.top:3006' + data.url

        }else{

          alert("图片上传失败")

        }

      }

    }

})

 

显示文件上传进度

XMLHttpRequest对象可以通过监听xhr.upload.onprogress事件,来获取文件的上传进度

 

引入bootstrap,并加进度条显示

 

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

<!-- bootstrap进度条 -->

  <div class="progress" style="width: 500px; margin: 15px 10px;">

    <div class="progress-bar progress-bar-striped active"  id="percent"   style="width: 0%;">

      0%

    </div>

  </div>

  <!-- img显示上传成功后的图片 -->

  <img src="" id="img" alt="">

在创建XML对象之后

 var xhr = new XMLHttpRequest();

// 监听文件上传的进度

xhr.upload.onprogress = function(e){

  // console.log(1)

  if(e.lengthComputable){

    // 计算上传的进度   计算当前上传进度的百分比

    var procentComplete = Math.ceil((e.loaded / e.total)*100);

    // console.log(procentComplete)

    // 动态设置进度条

 

    $("#percent").attr('style','width:' + procentComplete + '%;').html(procentComplete + '%')

  }

}

 

// 监听上传完成的事件

xhr.upload.onload = function(){

  $("#percent").removeClass().addClass('progress-bar progress-bar-success')

}

使用jQuery实现文件上传

1定义ui结构
 

<input type="file"  id="file1">

<button id="btn">上传文件</button>

<br/>

<img src="./loading.gif" style="display: none;" id="loading" alt="">

2验证是否选择了文件

var files = $("#file1")[0].files;

    if(files.length <= 0){

      return alert("请选择文件后再上传");

    }

3:向FormData中追加文件

// 追加到formdata中

    var fd= new FormData();

    fd.append('avatar',files[0])

4:使用jquery发起上传文件得请求

// 发起jquery得ajax请求  上传文件

    $.ajax({

      method:'POST',

      url:"http://www.liulongbin.top:3006/api/upload/avatar",

      data:fd,

      // 不修改Content-Type属性  使用FormData默认的Content-Type

      contentType:false,

      // 不对FormData中的数据进行url编码  而是将FormData数据原样发送到服务器

      processData:false,

      success:function(res){

        console.log(res)

      }

    })

5jQuery实现loading效果

1:ajaxStart(callback)

ajax请求开始时,执行ajaxStart,可以在它的callback中显示loading效果

  // 监听ajax请求被发起了   会监听当前页面中所有的ajax请求

$(document).ajaxStart(function(){

    $("#loading").show()

})

2:ajaxStop(callback)

ajax请求结束时,执行ajaxStop函数,可以在callback中隐藏loading效果

$(document).ajaxStop(function(){

  $("#loading").hide()

})

 

 
Copyright @ 2013-2021 元素模板 www.ys720.com All Rights Reserved. 版权所有 元素模板 www.ys720.com