我正在尝试点击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--
请让我知道解决此问题的一些解决办法。
答案 0 :(得分:1)
您的reqPayload
变量是一个字符串,因此您根本不需要将其序列化;您可以按原样将其附加到FormData
:
ajaxOptions.data.append("jsonInputParameters", reqPayload);
也就是说,如果您将有效负载创建为对象,然后在发出请求之前使用JSON.stringify
来序列化数据,那么实践更好,更容易维护,如下所示:
var reqPayload = {
param1: "value1"
};
ajaxOptions.data.append("jsonInputParameters", JSON.stringify(reqPayload));