#jquery #html #json #ajax
#jquery #HTML #json #ajax
Вопрос:
Я пытаюсь попасть в 1 API, делая запрос HTTP POST с использованием составных данных, но я получаю ошибку 400 Bad Request.
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:
Ваша reqPayload
переменная представляет собой строку, поэтому вам вообще не нужно ее сериализовать; вы можете просто добавить ее FormData
как есть:
ajaxOptions.data.append("jsonInputParameters", reqPayload);
Тем не менее, это гораздо лучшая практика и проще в обслуживании, если вы создаете полезную нагрузку как объект, а затем используете JSON.stringify
для сериализации данных перед отправкой запроса, например:
var reqPayload = {
param1: "value1"
};
ajaxOptions.data.append("jsonInputParameters", JSON.stringify(reqPayload));
Комментарии:
1. Но переменная reqPayload уже находится в строковом формате. Итак, как это может помочь?
2. Кроме того, мне нужно отправить объект вместо строки
3. Хороший момент. В этом случае просто добавьте его прямо в FormData без какой-либо кодировки.
4. Вы не можете отправить объект в HTTP-запросе, он должен быть сериализован в строку
5. Огромное спасибо, Рори. Сработала простая передача строки. Я долгое время пытался передать информацию как объект. Большое спасибо.