Ajax如何上传表单数据及文件

以往的ajax传参

        const title = $("input[name='title']").val();

        const content = editor.txt.html();
        $.ajax(
            {
                headers: {
                    'X-CSRF-TOKEN': ""
                },
                type: "post",
                async: false,
                url: '/account',
                data: {'title':title, 'content':content},
                success: function (res) {
                    console.log(res);

                }
            }
        );

以上方法只能传递参数,若遇到上传用户信息(姓名,性别,身份证)类似操作,则会报错

期间想到的处理方法,单独创建一个接口,借助这个接口单独上传图片文件,但操作麻烦。

一番度娘后,找到解决办法

        var formData = new FormData();
        formData.append('image', images);
        formData.append('name', name);

        formData.append('content', content);

        $.ajax(
            {
                headers: {
                    'X-CSRF-TOKEN': ""
                },
                type: "post",
                async: false,
                url: '/account',
                contentType: false, 
                processData: false,
                data: formData,
                success: function (res) {
                    console.log(res);
                 
                },
                error:function (res) {
                    console.log(res);
                }
            }
        );

FormData:用一些键值对来模拟一系列表单控件,即把form中所有的元素的name与value组成一个queryString。

详解可以度娘(主要作者也是一知半解)

特别注意

#必要参数,不加会报错
contentType: false  #发送数据到服务器时所使用的内容类型
processData: false  #请求发送的数据是否转换为查询字符串

,