jQuery:表单数据不支持的媒体类型

时间:2019-03-02 08:16:28

标签: javascript jquery ajax

我正在通过REST API上传表单数据,并且我正在使用以下代码。它给我错误代码415,且媒体类型不受支持。

请纠正我哪里出错了。

var device = new FormData();
device.append("device_id", "2");
device.append("Img","D:\\Main\\xampp\\htdocs\\test\\img\\default.png");

$.ajax(
        { 
            type: 'POST', 
            url: getApiURL(25),
            data: device,
            processData: false,
            "mimeType": "multipart/form-data",
            headers: { 
                "Authorization": "Basic " + base_64_firebase_token,
                "Content-Type": "application/x-www-form-urlencoded",
            },
            success : function(data){
                callback(data);
            }, 
            error: function (xhr,ajaxOptions,throwError){
                console.log(xhr);
                console.log(ajaxOptions);
                console.log("Error!!!"+throwError);
            }
        }
);

2 个答案:

答案 0 :(得分:0)

如果您只想添加静态图像,则如果仍要添加静态图像,或者必须发送用户添加的图像,请执行以下操作:

要正确使用表格数据,您需要执行2个步骤。

准备工作

您可以将整个表单交给FormData()进行处理

var form = $('form')[0]; // You need to use standard javascript object here
var formData = new FormData(form);

或为FormData()指定确切数据

var formData = new FormData();
formData.append('section', 'general');
formData.append('action', 'previewImg');
// Attach file
formData.append('image', $('input[type=file]')[0].files[0]); 

发送表单

带有jquery的Ajax请求将如下所示:

$.ajax({
    url: 'Your url here',
    data: formData,
    type: 'POST',
    contentType: false, // NEEDED, DON'T OMIT THIS (requires jQuery 1.6+)
    processData: false, // NEEDED, DON'T OMIT THIS
    // ... Other options like success and etc
});

此后,它将发送ajax请求,就像您使用enctype="multipart/form-data"

提交常规表格一样

更新:如果没有选项中的type:"POST",该请求将无法工作,因为所有文件都必须通过POST请求发送。

注意contentType: falsefrom jQuery 1.6 onwards

可用

答案 1 :(得分:-1)

在AJAX通话中,您需要设置内容类型:

headers: {
   'Accept': 'application/json',
   'Content-Type': 'application/json'
},