json поле не отправляется на сервер с помощью fetch - PullRequest
0 голосов
/ 07 апреля 2020

Я отправил эту форму в приложение flask, используя AJAX метод выборки, но по какой-то причине он не go до сервера, я могу предупредить ввод без проблем.

<html>
    <head>
        <title>TODO App</title>
    </head>
    <style>
        .hidden {
            display: none;
        }
    </style>
    <body>
        <form id="form" >
            <input type="text" id="description" name="description" />
            <input type="submit" value="Create" />
        </form>
        <div id="error" class="hidden">Something went wrong</div>
        <uL id="todos">
            {%for d in data%}
            <li>{{d.description}}</li>
            {%endfor%}
        </uL>
    </body>
    <script>
        document.getElementById('form').onsubmit = function(e) {
            e.preventDefault();
            //alert(document.getElementById('description').value);
            let desc = document.getElementById('description').value;
            alert(desc);
            fetch('/todos/create', {
                method: 'POST',
                body: JSON.stringify({
                    'description': desc
                }),
                headers: {
                    'content-type': 'application/json'
                }
            })
            .then(function (response){
                return response.json();
            })
            .then(function(jsonResponse){
                console.log(jsonResponse);
                const liItem = document.createElement('LI');
                liItem.innerHTML = jsonResponse['description'];
                document.getElementById('todos').appendChild(liItem);
            })
            .catch(function(){
                document.getElementById('error').className = '';
            })
        }
    </script>
</html>

функция python, которая при необходимости прослушивает это:

@app.route('/todos/create', methods=['POST'])
def create_todo():
  #description = request.form.get('description', '')
  description = request.form.get_json()['description']
  todo = Todo(description=description)
  db.session.add(todo)
  db.session.commit()
  #return redirect(url_for('index'))
  return jsonfiy({
    'description' : todo.description
  })

текстовый ввод с описанием id = - это тот вопрос, о котором я всегда получаю сообщение об ошибке, указанное в catch , не уверен в чем проблема! когда функция python имела значение по умолчанию, в случае, если поле не было заполнено, элемент добавлялся в базу данных без проблем, но когда я удалял значение по умолчанию, возникают проблемы, потому что ввод не переносится на сервер

1 Ответ

0 голосов
/ 07 апреля 2020

поэтому проблема заключалась в использовании

request.form.get_json()

в функции python, где она должна быть на самом деле:

request.get_json()

, которая исправила это спасибо за все комментарии.

...