jquery的$.ajax()利用FormData数据类型与php后台交互

可能孤陋寡闻,现在才知道MDN的存在:https://developer.mozilla.org/zh-CN/

的MDN全名容易理解他是什么意思:MDN Web Docs

 

好了,自行学习,上一篇讲了jquery的$.ajax()利用json数据类型与php后台交互

那么从MDN上了解到,原来html5中表单数据除了用json数据类型来传给后台,还可以用FormData数据类型来进行传递,而且FormData还加入了文件数据类型的传递。有利于ajax与php后台的文件上传。

 

先来看看MDN是怎么描述FormData的:https://developer.mozilla.org/en-US/docs/Web/API/FormData

 

//构造函数
var formdata = new Formdata();

 

使用FormData的接口主要是键(name)和值(value)

那么好了,构造完FormData了,其实其方法主要是FormData.append();插入元素,添加键和值,但是也需要注意

FormData.append()和FormData.set()的区别。

 

 

// append()两个重载函数
formData.append(name, value);
formData.append(name, value, filename);
 

FormData.append():如果键已经存在,不断使用append()会将新值添加到已有的值集合后面

FormData.set():如果键已经存在,set()会将新值覆盖掉原来的值

FormData.append()中filename可有可无,但是name和value就必须要有。

MDN中讲到value值可以是Blob和File类型的值,File好理解;Blob(binary large object)),通俗点讲就是大的二进制对象,可以是图片、音频,而且BLOB常常是数据库中用来存储二进制文件的字段类型,例如mysql数据库。

 

好了,讲完那么多,直接实践

 

先试一波水,其实想找上传文件,然后获取文件名;但是想着先确认能不能直接在js中获取文件名,结果很出乎意料,js好像没有特定的函数可以直接获取文件名的,情急之下,唯有采取路径名来进行分解。

 

 

 文件:<input type="file" name="file" id="file"><br> //html代码
//js代码
 var file = $("#file").val(); //获取文件路径名
 console.log(file);

 var index = file.lastIndexOf("\\"); //最后一个匹配转义字符'\\'的索引位置
 console.log(index);

 console.log(file.substring(index+1));  //获取最后'\\'的后面字符串便是文件名

结果:Chrome的结果,说是为了安全隐藏了文件路径,用了个fakepath代替

 

 

无语后,用了Edge试试,行了

 

 

没关系,反正php有一个特定函数可以获取文件名:basename()

 

index.html代码:

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
  <!--利用cdn添加js和css库  -->
  <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

</head>
<body style="text-align: center; padding: 100px;">

 姓名: <input type="text" name="name" id="yourName" /><br>
 年龄: <input type="text" name="age" id="yourAge" /><br>
 性别: <input type="text" name="sex"  id="yourSex"><br>
 文件:<input type="file" name="file" id="file"><br>

<button id="send">提交</button>
<br><br><br><br>

<div id="result">结果:</div>
</body>   

<script type="text/javascript">

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

          var name = $("#yourName").val();
          var age = $("#yourAge").val();
           var sex = $("#yourSex").val();

           var file = $("#file").val(); //获取文件路径名
           console.log(file);

           var index = file.lastIndexOf("\\"); //最后一个匹配转义字符'\\'的索引位置
           console.log(index);

           console.log(file.substring(index+1));  //获取最后'\\'的后面字符串便是文件名

           var formData = new FormData();

           formData.append('name',name);
           formData.append('age',age);
           formData.append('sex',sex);
           formData.append('file',file);
          
           $.ajax({
             type: "POST",
             url: "server.php",  //同目录下的php文件
           
            data:formData,
            dataType:"json", //声明成功使用json数据类型回调

            //如果传递的是FormData数据类型,那么下来的三个参数是必须的,否则会报错
             cache:false,  //默认是true,但是一般不做缓存
             processData:false, //用于对data参数进行序列化处理,这里必须false;如果是true,就会将FormData转换为String类型
             contentType:false,  //一些文件上传http协议的关系,自行百度,如果上传的有文件,那么只能设置为false
             
             success: function(msg){  //请求成功后的回调函数

                $("#result").append("你的名字是"+msg.name+",性别:"+msg.sex+",年龄:"+msg.age+",上传的文件名:"+msg.file);

            }
        });

      })
  })
 
</script>


</html>
 

 

server.php代码

 

<?php

	$username = $_POST['name']; //获取索引
	$age = $_POST['age'];
	$sex = $_POST['sex'];
	$file = basename($_POST['file']);  //php的basename() 方法可获取文件名
	$json_array = array('name'=>$username,'age'=>$age ,'sex'=>$sex,'file'=>$file ); //转换成数组类型

	$json= json_encode($json_array);  //将数组转换成json对象
	echo  $json;
	
?>
 

 

结果:

 

 

 

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
$.ajaxjQuery中的一个方法,用于发送异步HTTP请求。它可以用于上传文件,以下是使用$.ajax上传文件的步骤: 1. 创建一个HTML表单,包含一个文件输入框和一个提交按钮: ```html <form id="myForm" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ``` 2. 使用JavaScript代码监听表单的提交事件,并阻止默认的表单提交行为: ```javascript $('#myForm').submit(function(e) { e.preventDefault(); // 阻止表单默认提交行为 // 在这里编写上传文件的代码 }); ``` 3. 在表单提交事件中,使用$.ajax方法发送POST请求,将文件数据作为FormData对象发送: ```javascript $('#myForm').submit(function(e) { e.preventDefault(); // 阻止表单默认提交行为 var formData = new FormData(this); // 创建FormData对象,将表单数据包装起来 $.ajax({ url: 'upload.php', // 上传文件的服务器端地址 type: 'POST', data: formData, processData: false, // 不处理数据 contentType: false, // 不设置内容类型 success: function(response) { // 上传成功后的处理逻辑 }, error: function(xhr, status, error) { // 上传失败后的处理逻辑 } }); }); ``` 4. 在服务器端接收上传的文件并进行处理。具体的服务器端代码实现因语言和框架而异,这里以PHP为例: ```php <?php $targetDir = "uploads/"; // 上传文件保存的目录 if (!empty($_FILES['file'])) { $tempFile = $_FILES['file']['tmp_name']; $targetFile = $targetDir . $_FILES['file']['name']; move_uploaded_file($tempFile, $targetFile); // 将临时文件移动到目标位置 } ?> ``` 以上就是使用$.ajax上传文件的基本步骤。通过监听表单的提交事件,使用FormData对象将文件数据包装起来,然后通过$.ajax方法发送POST请求到服务器端进行文件上传。服务器端接收到文件后,可以根据具体需求进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值