Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что писать в request.send(), чтобы отправить Post? (https://javascript.ru/forum/misc/80329-chto-pisat-v-request-send-chtoby-otpravit-post.html)

nastya97core 23.05.2020 14:54

Что писать в request.send(), чтобы отправить Post?
 
Здравствуйте. Есть вот такой аналог ajax:
function sub(event){
event.preventDefault ? event.preventDefault() : event.returnValue = false;
var request = new XMLHttpRequest();
request.open('POST', 'file.php, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);
}


Подскажите, чему должен быть равен data?

В jQuery я делала
data = new FormData(event.target);
, но сейчас так не работает, уходит пустой запрос. Ошибок никаких нет.

Если провести тоже самое в IE9, то вернётся ошибка "formData не определено"

В html у меня так:
<form enctype="multipart/form-data" method="post" id="form" onsubmit="sub(event)">
...
</form>

Malleys 23.05.2020 15:05

Цитата:

Сообщение от nastya97core
но сейчас так не работает, уходит пустой запрос. Ошибок никаких нет.

Вообще-то уходит не пустой запрос!

Возможно вам проще будет отправлять так...
function sub(event){
	event.preventDefault();
	var request = new XMLHttpRequest();
	request.open('POST', 'file.php', true);
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	request.send(new URLSearchParams(new FormData(event.target)));
}


Цитата:

Сообщение от nastya97core
Есть вот такой аналог ajax

Забудьте про этот неудачный термин, он вам не нужен — используйте «запрос» или «отправка данных»!

nastya97core 23.05.2020 15:40

Malleys,
я так поняла, что ошибка в
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

ведь у меня multipart/form-data, а здесь applocation... я попыталась заместо этого написать multipart..., но мне вернулась ошибка:
Warning: Missing boundary in multipart/form-data POST data in Unknown on line 0
тогда я вовсе убрала эту строку и всё начало отправляться. Я просто не знаю, насколько эта строка вообще ценна? и если ценна, то что я должна там прописать?

laimas 23.05.2020 15:44

https://developer.mozilla.org/ru/doc...P/Methods/POST

multipart/form-data необходим при отправлении и файлов.

Rise 23.05.2020 15:48

Цитата:

Сообщение от nastya97core
'file.php

Ошибка, нет закрывающей кавычки.
Цитата:

Сообщение от nastya97core
application/x-www-form-urlencoded

Ошибка, у FormData контент в multipart/form-data и заголовок сам устанавливается.

nastya97core 23.05.2020 16:05

Rise,
не, она там была. просто случайно при копировании сюда, я её задела.

то есть в этой строчке нет никакого смысла? Нигде ничего не поломается если её не будет?

Rise 23.05.2020 16:10

Цитата:

Сообщение от nastya97core
насколько эта строка вообще ценна?

Ценна, она указывает серверу как декодировать тело запроса.

Rise 23.05.2020 16:28

Цитата:

Сообщение от nastya97core
то есть в этой строчке нет никакого смысла?

...
Цитата:

Сообщение от Rise
у FormData ... заголовок сам устанавливается.


nastya97core 23.05.2020 17:41

Цитата:

Сообщение от Rise (Сообщение 524775)
Ошибка, нет закрывающей кавычки.

Ошибка, у FormData контент в multipart/form-data и заголовок сам устанавливается.

блин... ну я поэтому и спрашиваю: для меня она получается не нужна, потому что у меня formData? было бы что-то другое, то я бы должна была туда что-то написать? верно?

Rise 23.05.2020 18:37

Цитата:

Сообщение от nastya97core
было бы что-то другое, то я бы должна была туда что-то написать?

Не должна, это зависит от body в .send(body). Например, если это объект URLSearchParams, как в посте 2, то установится в application/x-www-form-urlencoded автоматически. Если это строка, то установится в text/plain. Если это urlencoded-строка, то теперь ДОЛЖНА переопределить дефолт text/plain в application/x-www-form-urlencoded. Если это какой-нибудь объект Blob, то там тоже автоматически устанавливается по его значению. И так далее. Короче, если дефолтные значения по каким-то причинам не устраивают, то ДОЛЖНА переопределять через .setRequestHeader().


Часовой пояс GMT +3, время: 20:28.