HTTP多部分请求出现400 Bad Request错误

时间:2016-10-18 10:09:59

标签: jquery html json ajax

我正在尝试点击1个API,使用多部分数据发出HTTP POST请求,但我收到400个错误请求错误。

var reqPayload='{
    "param1":"value1"
}';

var ajaxOptions = {
            url: href,
            type: method_NAME,
            async: true
};
ajaxOptions.data = new FormData();
ajaxOptions.data.append("jsonInputParameters", $.parseJSON(reqPayload));

ajaxOptions.contentType = false;
ajaxOptions.processData = false;

//following will not create any problem since there is only 1 file.
$.each($('#id_NAME input[type="file"]')[0].files, function(i, file) {
    ajaxOptions.data.append('primaryFile', file);
});

我的请求如下:

------WebKitFormBoundary9hoSobTAHgGksFST
Content-Disposition: form-data; name="jsonInputParameters"

[object Object]
Content-Disposition: form-data; name="primaryFile"; filename="example.txt"
Content-Type: text/plain

------WebKitFormBoundary9hoSobTAHgGksFST

但是,我想要的是:

------WebKitFormBoundary9hoSobTAHgGksFST
Content-Disposition: form-data; name="jsonInputParameters"

{
"parentID":"FB4CD874EF94CD2CC1B60B72T0000000000100000001"
}

------WebKitFormBoundary9hoSobTAHgGksFST
Content-Disposition: form-data; name="primaryFile"; filename="example.txt"
Content-Type: text/plain

<File Content>
------WebKitFormBoundary9hoSobTAHgGksFST--

请让我知道解决此问题的一些解决办法。

1 个答案:

答案 0 :(得分:1)

您的reqPayload变量是一个字符串,因此您根本不需要将其序列化;您可以按原样将其附加到FormData

ajaxOptions.data.append("jsonInputParameters", reqPayload);

也就是说,如果您将有效负载创建为对象,然后在发出请求之前使用JSON.stringify来序列化数据,那么实践更好,更容易维护,如下所示:

var reqPayload = {
    param1: "value1"
};
ajaxOptions.data.append("jsonInputParameters", JSON.stringify(reqPayload));