Я следил за Учебником по отправке запросов AJAX с помощью jQuery в Flask, который на самом деле был успешным. Но после игры с AJAX кажется, что я не все понял об этой системе.
Мой js-файл:
$.ajax({
data : {
name : $('#nameInput').val(),
email : $('#emailInput').val(),
test : $('#test').val()
},
type : 'POST',
url : '/process',
contentType: 'application/json'
})
.done(function(data) {
if (data.error) {
$('#errorAlert').text(data.error).show();
$('#successAlert').hide();
}
else {
$('#successAlert').text(data.name).show();
$('#errorAlert').hide();
}
});
Теперь у моих данных есть три поля ввода текста, два из них в форме, одно из них просто тег:
<form class = "form-inline">
<div class = "form-group">
<label class = "sr-only" for = "emailInput">Email address</label>
<input type = "email" class = "form-control" id = "emailInput" placeholder = "Email">
</div>
<div class = "form-group">
<label class = "sr-only" for = "nameInput">Name</label>
<input type = "text" class = "form-control" id = "nameInput" placeholder = "First Name">
</div>
<button type = "submit" class = "btn btn-default">Submit</button>
</form>
<br>
<input type = "text" id = "test" placeholder = "Test">
<br>
Теперь, если я правильно понимаю, то для jquery не имеет значения, где находятся поля ввода в HTML-документе, он найдет мой id-тег и привяжет его к моему объекту данных. Но по какой-то причине при попытке прочитать мой почтовый запрос в моем приложении фляги он не может прочитать мой объект.
Вот моя фляжная функция @route:
@app.route('/process', methods=['POST'])
def process():
test = request.form['test']
email = request.form['email']
name = request.form['name']
if name and email:
newName = test[::-1]
return jsonify({'name' : newName})
return jsonify({'error' : 'Missing data!'})
Странная часть заключается в том, что при удалении всех моих «тестовых» тегов и оставлении только электронной почты и имени мой код работает. Только если я помещу туда тестовый ввод и строку jquery test:$('#test').val() и строку в моем коде python test = request.form['test'], это сработает.
Какую деталь я упускаю? Я много чего там пробовал
Одна проблема заключается в том, что вы устанавливаете contentType: 'application/json', но отправляете application/x-www-form-urlencoded. В любом случае, сделайте правильную отладку и просто запишите содержимое request.form



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


добавьте dataType: 'json' или взгляните на $.post