29.05.2020, 14:11
|
Новичок на форуме
|
|
Регистрация: 29.05.2020
Сообщений: 2
|
|
ошибка 500 fetch
Здравствуйте, возникла проблема. Я написал форму регистрации, которая успешно работает, после чего написал js файл, который обращается к серверу через fetch GET методом и всё ок. Но когда я сделал форму логина и повторил всё уже с методом POST, то сервер выдаёт ошибку 500, причём сама форма логина работает, однако если подключить js файл с fetch то случается error. Есть идеи с чем это может быть связано?
форма логина
<!DOCTYPE HTML>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="https://test-publicapi.maximarkets.org/Account/logon">
<p>
<label>Login<br>
<input name="email" type="email" size="40" id="log">
</label>
</p>
<p>
<label>Password<br>
<input name="password" type="password" size="40" id="pass">
</label>
</p>
<p>
<button type="submit">Вход</button>
</p>
</form>
<script src="scriptforlog.js"></script>
</body>
</html>
Вот js файл
async function onFormSubmit(evt) {
evt.preventDefault();
let email = document.getElementById('log').value;
let password = document.getElementById('pass').value;
let skip2Fa = true;
let data = new FormData();
data.append('email',email);
data.append('password',password);
data.append('skip2Fa',skip2Fa);
const response = await fetch(`https://test-publicapi.maximarkets.org/Account/logon`, {
method: "POST", body: data
});
if(response.ok) {
alert('ok');
} else {
alert('wrong');
};
}
const form = document.querySelector('form');
form.addEventListener('submit' , onFormSubmit);
|
|
30.05.2020, 02:49
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от BJester
|
Есть идеи с чем это может быть связано?
|
Вы отправляете данные в разных форматах — когда отправляли напрямую через форму, то там был тип application/x-www-form-urlencoded, (такой же, как у текстового представления класса URLSearchParams), что очевидно принимается сервером.
А класс FormData в конечном счёте представляет данные при отправке в виде типа multipart/form-data, а вам нужен application/x-www-form-urlencoded. Можно перевести из одного формата в другой, а можно сразу правильный.
Например, замените (строка №8) FormData на URLSearchParams.
|
|
30.05.2020, 13:19
|
Новичок на форуме
|
|
Регистрация: 29.05.2020
Сообщений: 2
|
|
Спасибо, я уже понял что проблема была в формате данных, однако я решил проблему таким способом(добавил headers)
function onFormSubmit(evt) {
evt.preventDefault();
let mail = document.getElementById('log').value;
let pass = document.getElementById('pass').value;
fetch('https://test-publicapi.maximarkets.org/Account/logon', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: mail,
password: pass,
})
});
}
const form = document.querySelector('form');
form.addEventListener('submit' , onFormSubmit);
|
|
30.05.2020, 17:09
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
multipart/form-data, а вам нужен application/x-www-form-urlencoded
|
А чем смешанный тип не подойдет? Статус 500, это в первую очередь нужно смотреть логи на сервере и устранять причину на нем.
|
|
04.06.2020, 01:53
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от laimas
|
А чем смешанный тип не подойдет?
|
Пусть имеется адрес «dimityr.novakov@gmil.com» и пароль «anybody!has@got#to$learn%sometime», которые нужно передать на сервер. Давайте посмотрим, как можно представить эти данные для передачи...
- multipart/form-data
Код:
|
------WebKitFormBoundaryfJQTzzfNQvHhuVKC
Content-Disposition: form-data; name="email"
dimityr.novakov@gmil.com
------WebKitFormBoundaryfJQTzzfNQvHhuVKC
Content-Disposition: form-data; name="password"
anybody!has@got#to$learn%sometime
------WebKitFormBoundaryfJQTzzfNQvHhuVKC-- |
- application/x-www-form-urlencoded
Код:
|
email=dimityr.novakov%40gmil.com&password=anybody%21has%40got%23to%24learn%25sometime |
- application/json
Код:
|
{"email":"dimityr.novakov@gmil.com","password":"anybody!has@got#to$learn%sometime"} |
Т. к. передача файлов не нужна в данном случае, то наверно следует отдавать предпочтение менее многословному формату!
Сообщение от laimas
|
Статус 500, это в первую очередь нужно смотреть логи на сервере и устранять причину на нем.
|
Многие общественные API могут такое возвращать, однако это скорей означает, что следует посылать данные в правильном формате.
|
|
04.06.2020, 07:09
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
однако это скорей означает, что следует посылать данные в правильном формате.
|
Ой ли так это на самом деле? И остальное ну чушь полнейшая, ибо на то он и смешанный тип, и он никак не может стать причиной ошибки отправки им вместо application/x-www-form-urlencoded.
|
|
04.06.2020, 09:24
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Malleys
|
И остальное ну чушь полнейшая
|
Какие предъявы? Посчитай байты!
Сообщение от laimas
|
ибо на то он и смешанный тип, и он никак не может стать причиной ошибки
|
Конечно же можешь посылать данные во всех возможных форматах, однако разработчики серверного кода могли написать только обработку, например, для типа json, а на всё остальное завершение со статусом 404 или 500 или найди ещё «Я — чайник!» или ещё что!
Сообщение от laimas
|
на то он и смешанный тип, и он никак не может стать причиной ошибки
|
«Не хотим принимать такое — завершили как смогли!»
|
|
04.06.2020, 09:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Слушай, гений ты наш, ты практически ответил на возможную причину ошибки тем, что вместо application/x-www-form-urlencoded отдается тип multipart/form-data, что является просто бредом. Все дальнейшие твои рассказы, это пересказ документации, которую я и без тебя знаю.
И хотя бы поинтересовался каковы причины могут порождать статус 500, и корректно ли будет бездумно при этом выплевывать его клиенту, пусть мается в догадках. А то гонишь пургу, баз какой-то беспредметный.
|
|
04.06.2020, 10:26
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от laimas
|
И хотя бы поинтересовался каковы причины могут порождать статус 500, и корректно ли будет бездумно при этом выплевывать его клиенту, пусть мается в догадках.
|
Вам уже отвечали — неверный формат данных запроса. А чём вам не подходит ответ в формате JSON?
Сообщение от laimas
|
ты практически ответил на возможную причину ошибки тем, что вместо application/x-www-form-urlencoded отдается тип multipart/form-data
|
Я писал про отправку на сервер в формате multipart/form-data (и автор темы тоже), а не про отправку клиенту, которая кстати, происходит в формате JSON. И отправка клиенту статуса 500, а также сопутствующих данных тоже происходит в формате JSON...
{
"errorType": 1,
"statusCode": 500,
"message": "Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.",
"messageDetail": null,
"validationErrors": null,
"padString": null
}
Сообщение от laimas
|
Все дальнейшие твои рассказы, это пересказ документации
|
Какой пересказ? Даже автор темы давно понял, что «проблема была в формате данных».
|
|
04.06.2020, 10:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Malleys
|
Вам уже отвечали — неверный формат данных запроса. А чём вам не подходит ответ в формате JSON?
|
Значит так: если речь об API, то нормальный разработчик обязательно опишет параметры запроса, иначе, что вполне естественно, с API нельзя будет работать. В том что такое случилось скорее вина пользователя не удосужившегося прочесть документацию, и обнаружившего решение методом научного тыка.
Ты же начал совсем с иного, что вообще никоим образом не могло быть источником проблемы. Все остальное, это ради поболтать.
PS. Кстати, отвечать клиенту статусом 404 на ошибку несоответствия типу, это вообще из рук вон.
Последний раз редактировалось laimas, 04.06.2020 в 12:03.
|
|
|
|