如何用ajax传输文件

下面是01.html文件的内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery.js"></script>
</head>
<body>

<input type="file" onchange=f()>

<script>
    function f(){
        $.ajax({
            url:"02.php",
            data:{a:this},
            type:"post"
        })
    }
</script>

</body>
</html>

下面是02.php文件的内容:

<?php
$fileName = $_POST["a"]["name"];//文件的名称

$AX=mysqli_connect("127.0.0.1", "root", "root");//连接mysql服务器
mysqli_select_db($AX, "ax");//连接数据库
mysqli_query($AX, "set name utf8");//执行语句:设置中文编码

$A6="insert into ax02
    (文档名)
    values
    ('$fileName')
    ";
mysqli_query($AX,$A6);//执行语句:添加数据

运行01.html,并没有在数据库中添加数据。
哪里出了问题?

ajax传递文件需要用到FormData对象,不能按照键值对那样传递。而且文件对象要用move_uploaded_file保存上传的数据,然后数据库存文件名,

大概示例如下,有帮助麻烦点个采纳,谢谢~

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<input type="file" onchange="f(this)">
<script>
    function f(el){//
        var data=new FormData();
        data.append('file',el.files[0]);////
        $.ajax({
            url:"02.php",
            data:data,/////////
            type:"post",
            processData:false,/////////
            contentType: false,
            complete:function(xhr){
             alert('php执行完毕,服务器端返回\n'+xhr.responseText)
            }
        })
  }
</script>
</body>
</html>


02.php

<?php
  
    // 设置文件的保存路径  
    //如果文件是中文文件名,则需要使用 iconv() 函数将文件名转换为 gbk 编码,否则将会出现乱码  
    $fileName = 'upload/'.iconv('UTF-8','gbk',basename($_FILES['file']['name']));  
  
    // 将用户上传的文件保存到 upload 目录中  
    if (move_uploaded_file($_FILES['file']['tmp_name'],$fileName)){  
        
    $fileName = $_POST["a"]["name"];//文件的名称 
    $AX=mysqli_connect("127.0.0.1", "root", "root");//连接mysql服务器
    mysqli_select_db($AX, "ax");//连接数据库
    mysqli_query($AX, "set name utf8");//执行语句:设置中文编码 
    $A6="insert into ax02(文档名)values('$fileName')";
    mysqli_query($AX,$A6);//执行语句:添加数据
    }  
    else{  
        echo '文件上传失败';  
    }  

?>

和服务器说了发送是文件数据格式了吗