@Aaltsin

Почему происходит 400 Bad Request: KeyError при заполнении формы?

Есть 2 функции, которые по нажатию на кнопку "Ок" должны с помощью ajax вернуть на страницу ответ, соответственно есть для них и 2 ajax функции. Обе функции практически идентичны, но вторая не работает.

Код второй функции:
@app.route('/act_2', methods = ['GET', 'POST'])
def act_2():
	#try:
		foo = guard(request.form['foo'])
		y0 = float(guard(request.form['y0']))
		h = float(guard(request.form['h']))
		a = float(guard(request.form['a']))
		b = float(guard(request.form['b']))
		method = request.form['method'] 
		ans = acting_2(foo, y0, h, a, b, method)
		return json.dumps({'act_2': ans})

	#except:
		#err = "Ошибка"
		#return json.dumps({'act': err})


Код ajax для второй функции:
function act_2() {
				$.ajax({
					type: "POST",
					url: "/act_2",
					data: $('form_2').serialize(),
					type: 'POST',
					success: function(response) {
						var json = jQuery.parseJSON(response)
						$('#act_2').html(json.act)
						console.log(response);
					},
					error: function(error) {
						console.log(error);
					}
				});
			}


Ошибка:
5cfe5ee996069228166907.png

Сама форма:
<form action = "/act_2" method="POST" name="form_2">
			<p>
				y' = <input type="text" name="foo"><br>
			</p>
			<p>y(0) = <input type="text" name="y0" size="1"></p>

и т.д

И тоже самое с первой функцией, но которая работает:
@app.route('/act', methods = ['GET', 'POST'])
def act():
	try:
		foo = guard(request.form['foo'])
		a = float(guard(request.form['a']))
		b = float(guard(request.form['b']))
		e = float(guard(request.form['e']))
		method = request.form['method']
		est = int(request.form['est'])
		ans = acting(foo, a, b, e, method, est)
		return json.dumps({'act': ans})


function act() {
				$.ajax({
					type: "POST",
					url: "/act",
					data: $('form').serialize(),
					type: 'POST',
					success: function(response) {
						var json = jQuery.parseJSON(response)
						$('#act').html(json.act)
						console.log(response);
					},
					error: function(error) {
						console.log(error);
					}
				});
			}


<form action = "/act" method="POST" name="form">
			<p>
				<input type="text" name="b" size="1"><br>
				<font size="20">∫</font>
				<input type="text" name="foo"> dx<br>
				<input type="text" name="a" size="1">
			</p>

и т.д.

По ошибке находятся решения в изменении разных названий имен из формы и имен в реквесте в питоне, но у меня они итак одинаковые.

Дополню еще, что если раскомментировать исключения на стороне сервера, то сообщение "ошибка" возвращается на странице, т.е сам ajax, по-идее, работает. Сама проблема в том, что форма как-бы или не существует или считает, что ничего не принимает.
  • Вопрос задан
  • 314 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Что, по-вашему, должен вернуть селектор $('form_2')? Если вы хотите получить форму по имени, то выглядеть он должен так $('[name="form_2"]').
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы