Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2020, 14:11
Новичок на форуме
Отправить личное сообщение для BJester Посмотреть профиль Найти все сообщения от BJester
 
Регистрация: 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);
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2020, 02:49
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от BJester
Есть идеи с чем это может быть связано?
Вы отправляете данные в разных форматах — когда отправляли напрямую через форму, то там был тип application/x-www-form-urlencoded, (такой же, как у текстового представления класса URLSearchParams), что очевидно принимается сервером.

А класс FormData в конечном счёте представляет данные при отправке в виде типа multipart/form-data, а вам нужен application/x-www-form-urlencoded. Можно перевести из одного формата в другой, а можно сразу правильный.

Например, замените (строка №8) FormData на URLSearchParams.
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2020, 13:19
Новичок на форуме
Отправить личное сообщение для BJester Посмотреть профиль Найти все сообщения от BJester
 
Регистрация: 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);
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2020, 17:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Malleys
multipart/form-data, а вам нужен application/x-www-form-urlencoded
А чем смешанный тип не подойдет? Статус 500, это в первую очередь нужно смотреть логи на сервере и устранять причину на нем.
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2020, 01:53
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 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 могут такое возвращать, однако это скорей означает, что следует посылать данные в правильном формате.
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2020, 07:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Malleys
однако это скорей означает, что следует посылать данные в правильном формате.
Ой ли так это на самом деле? И остальное ну чушь полнейшая, ибо на то он и смешанный тип, и он никак не может стать причиной ошибки отправки им вместо application/x-www-form-urlencoded.
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2020, 09:24
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Malleys
И остальное ну чушь полнейшая
Какие предъявы? Посчитай байты!

Сообщение от laimas
ибо на то он и смешанный тип, и он никак не может стать причиной ошибки
Конечно же можешь посылать данные во всех возможных форматах, однако разработчики серверного кода могли написать только обработку, например, для типа json, а на всё остальное завершение со статусом 404 или 500 или найди ещё «Я — чайник!» или ещё что!

Сообщение от laimas
на то он и смешанный тип, и он никак не может стать причиной ошибки
«Не хотим принимать такое — завершили как смогли!»
Ответить с цитированием
  #8 (permalink)  
Старый 04.06.2020, 09:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Слушай, гений ты наш, ты практически ответил на возможную причину ошибки тем, что вместо application/x-www-form-urlencoded отдается тип multipart/form-data, что является просто бредом. Все дальнейшие твои рассказы, это пересказ документации, которую я и без тебя знаю.

И хотя бы поинтересовался каковы причины могут порождать статус 500, и корректно ли будет бездумно при этом выплевывать его клиенту, пусть мается в догадках. А то гонишь пургу, баз какой-то беспредметный.
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2020, 10:26
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 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
Все дальнейшие твои рассказы, это пересказ документации
Какой пересказ? Даже автор темы давно понял, что «проблема была в формате данных».
Ответить с цитированием
  #10 (permalink)  
Старый 04.06.2020, 10:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Malleys
Вам уже отвечали — неверный формат данных запроса. А чём вам не подходит ответ в формате JSON?
Значит так: если речь об API, то нормальный разработчик обязательно опишет параметры запроса, иначе, что вполне естественно, с API нельзя будет работать. В том что такое случилось скорее вина пользователя не удосужившегося прочесть документацию, и обнаружившего решение методом научного тыка.

Ты же начал совсем с иного, что вообще никоим образом не могло быть источником проблемы. Все остальное, это ради поболтать.

PS. Кстати, отвечать клиенту статусом 404 на ошибку несоответствия типу, это вообще из рук вон.

Последний раз редактировалось laimas, 04.06.2020 в 12:03.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка 500 на хостинге Viktor0010 AJAX и COMET 4 13.08.2019 09:59
Ошибка 500 при обращении через аякс imedia AJAX и COMET 1 04.07.2015 14:08
подскажите почему 500 ошибка в этом случае imedia AJAX и COMET 2 21.01.2015 14:56
!!!! Изменение цвета при скролле Alim Элементы интерфейса 18 05.07.2013 21:43
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07