Я думаю, что проблема в том, что вы смешиваете два понятия здесь.
FormData полезно, когда вы хотите создать полезную нагрузку для вашего запроса как можно ближе к «металлу»:
Он использует тот же формат, который использовался бы формой, если бы тип кодирования был установлен на «multipart / form-data».
В то же время ваш AJAX клиент предоставляется набор опций, указывающих использовать вместо него JSON. И позвольте мне догадаться: когда вы тестируете это в Postman, полезная нагрузка выглядит следующим образом, верно?
{
"title": "my title",
"user_id: "20",
"company_id": "30"
}
Это нормально с сервером, так как он также должен ожидать JSON в полезной нагрузке, к этому ('Content-Type', 'application/json')
вариант заголовка. Но если вы хотите JSON, используйте простой JS объект с самого начала:
var FD = {
title: 'my title',
user_id: '20', // note the difference between string "20" and number 20
company_id: '30'
};
В двух словах, выберите один формат полезной нагрузки - и придерживайтесь его.
В качестве идентификатора, при отладке этой и аналогичных проблем, вы должны рассмотреть прямое сравнение полезной нагрузки вашего браузера и полезной нагрузки почтальона, отправляемой на ваш сервер. Если вы видите различия, то что-то не так с вашей реализацией на стороне клиента.
В этом случае $. ajax фактически отправляет это:
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="title"
my title
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="user_id"
20
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M
Content-Disposition: form-data; name="company_id"
30
------WebKitFormBoundaryQ7hyoAVZKN5BhF3M--
И, как вы можете видеть, это довольно далеко от правильного JSON. :)