ошибка 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); |
Цитата:
А класс FormData в конечном счёте представляет данные при отправке в виде типа multipart/form-data, а вам нужен application/x-www-form-urlencoded. Можно перевести из одного формата в другой, а можно сразу правильный. Например, замените (строка №8) FormData на URLSearchParams. |
Спасибо, я уже понял что проблема была в формате данных, однако я решил проблему таким способом(добавил 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); |
Цитата:
|
Цитата:
Т. к. передача файлов не нужна в данном случае, то наверно следует отдавать предпочтение менее многословному формату! Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Слушай, гений ты наш, ты практически ответил на возможную причину ошибки тем, что вместо application/x-www-form-urlencoded отдается тип multipart/form-data, что является просто бредом. Все дальнейшие твои рассказы, это пересказ документации, которую я и без тебя знаю.
И хотя бы поинтересовался каковы причины могут порождать статус 500, и корректно ли будет бездумно при этом выплевывать его клиенту, пусть мается в догадках. А то гонишь пургу, баз какой-то беспредметный. |
Цитата:
Цитата:
{ "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 } Цитата:
|
Цитата:
Ты же начал совсем с иного, что вообще никоим образом не могло быть источником проблемы. Все остальное, это ради поболтать. PS. Кстати, отвечать клиенту статусом 404 на ошибку несоответствия типу, это вообще из рук вон. |
Цитата:
И моё решение не было принято методом научного тыка. В начале автор пишет... Цитата:
«Но когда я повторил всё уже с методом POST, то произошло следующее. Форма логина срабатывала при отправке без скрипта путём нажатия на <input type="submit">, а когда подключил JS файл, в котором отменялась отправка по умолчанию и применялась отправка через fetch, то начала происходить ошибка» А раз речь шла об отправке одних и тех же данных, то сразу становится ясно, что проблема в формате данных. И действительно, форма логина срабатывает при отправке без скрипта путём нажатия на <input type="submit"> и данные отправляются в формате application/x-www-form-urlencoded, а когда используется класс FormData, то данные представлены в формате multipart/form-data, при отправке которых мы получаем сообщение об ошибке. Следовательно, чтобы повторить тоже самое, что происходило при отправке формы, но при помощи fetch, следует отправлять данные в формате application/x-www-form-urlencoded. В конкретном приведённом примере (сообщение №1) достигается заменой FormData на URLSearchParams. Итого: Malleys — «данные в разных форматах» (сообщение №2) BJester — «проблема была в формате данных» (сообщение №3) А чем помогает laimas декламируя «никак не может стать причиной ошибки», «чушь полнейшая» и пр.? Цитата:
|
Цитата:
А впал в транс и развел теорию не я, а ты. |
Часовой пояс GMT +3, время: 10:56. |