@uzi_no_uzi

FormData отправляет не те данные?

У меня есть свой плагин по отправке данных из формы на почту.

//Метод для создания строки запроса из объекта с параметрами
		_createQuery(paramsObj, method) {

			if(method === 'GET') {
				let query = '';

				for(let key in paramsObj) {
					query += `${key}=${paramsObj[key]}&`;
				}

				return query.substring(0, query.length - 1);
			} else {
				let data = new FormData();
				for(let key in paramsObj) {
					console.log(key, paramsObj[key]);
					data.append(key, paramsObj[key])
				}
				
				return data;
			}
			
		}

		onSendForm(method = 'GET', url, async, paramsObj) {

			const request = new XMLHttpRequest();

			if(method === 'GET') {
				url += '?' + this._createQuery(paramsObj, method);
				request.open(method, url, async);
				request.send();
			}

			if(method === 'POST') {
				request.open(method, url, async);
				request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				request.send(this._createQuery(paramsObj, method));
			}


			
		}


Форма отправляется методом POST.

GET метод отлично отрабатывает и все отправляется на почту как нужно.

Но вот с POST методом проблема, он собирает данные посредством formData объекта.
В приватном методе моего плагина _createQuery формируется POST запрос

let data = new FormData();
				for(let key in paramsObj) {
					console.log(key, paramsObj[key]);
					data.append(key, paramsObj[key])
				}
				
				return data;


Передаю верные данные (console.log(key, paramsObj[key]) выдает мне данные, что на скрине, т.е. в метод append передается все правильно.

5dcc635b6ea6e815141384.png

Но когда я смотрю, какие данные все же отправились POST запросом, то вижу непонятно что.

5dcc638eaf7ad126826669.png

Почему так происходит?
  • Вопрос задан
  • 373 просмотра
Пригласить эксперта
Ответы на вопрос 3
@McBernar
Потому что вы файл не прикрепили. А в php хотите с ним что-то сделать.
Ответ написан
@zhyeba
файлы приходят в массив $_FILES, а не $_POST
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Код взят из видеоурока, или слеплен из разных копипаст?
В чём вообще заключается смысл передавать заголовок Content-Type: application/x-www-form-urlencoded, но сами данные передавать в формате multipart/form-data через объект FormData?
В документации к FormData не сказано, что заголовок надо переопределять, браузер сам назначит нужный заголовок при отправке, вы только сломаете, если замените его на свой, не соответствующий правде (ибо в PHP нет сомнительных механизмов типа content-type sniffing, как браузер скажет - так он и будет разбирать входные данные безо всякой импровизации и угадайки).
Если код из видеоурока, то пристрелите автора, чтобы не советовал всякую чушь, а если из копипаст, то анализируйте каждую строку кода, а не пихайте бездумно, не зная, что она делает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы