2016-11-29 4 views
-1

Im пытается включить локальную функцию сохранения в моем Web App и каждый раз, когда я отправить данные в любой форме, я получаю следующее сообщение об ошибке:Почему я не могу отправить POST в sqlite из AJAX?

builtins.TypeError, а затем трассировки стека в/SAVEFILE и Jquery-3.1.1 .js: 9536 POST http://127.0.0.1:5000/SaveFile 500 (INTERNAL SERVER ERROR) в журнале консоли, когда я запустить приложение

Я настроил Everthing в колбе ниже следующим образом:

from flask import Flask, render_template, request 
import sqlite3 
import requests 
from requests import Request 
import json 

DATABASE = 'data/data.db' 

app = Flask(__name__) 

db = sqlite3.connect(DATABASE) 
cur = db.cursor() 

cur.execute("CREATE TABLE IF NOT EXISTS myrecipes(id INTEGER PRIMARY KEY,  name TEXT, rating TEXT, author TEXT, source TEXT)") 

db.commit()

Функция 10

AJAX:

function saveRecipe(title){ 

    $.ajax({ 
      type : "POST", 
      url : "/SaveFile", 
      data: { 'name': this.title }, 
      success: function(data) { 
       console.log("correct"); 
      }, 
     error: function(err) { alert(err); } 
     }); 

}// Save end 

Мне жаль, что я не могу включать больше информации в пост, но им даже не знаю, где им будет неправильно или то, что им не хватает, я добавил таблицу, как я ушел, что из код по ошибке.

+0

И после того, как связанного дубликат, дубликат [Как получить публикуемую JSON в термос?] (HTTP://stackoverflow.com/q/20001229/400617) – davidism

ответ

1

Я вижу здесь несколько вещей. Вам нужно будет добавить строку headers в свой метод AJAX, чтобы получить данные POST в Flask. Вам также необходимо JSON.stringify объекта для отправки, как это:

function saveRecipe(title) { 
    $.ajax({ 
     type: "POST", 
     headers: {"Content-Type": "application/json"}, 
     url: "/SaveFile", 
     data: JSON.stringify({name: title}), 
     success: function(response) { 
      console.log(response); 
     }, 
     error: function(response, error) { 
      console.log(response); 
      console.log(error); 
     } 
    }); 
} 

В фляге конечной точки вы просите переменный, поэтому вы получаете ошибку 500, а данные должны быть доступны через объект request.data. Кроме того, вероятно, лучше всего для этого метода не вызывать render_template и вернуть JSON в ваш метод XHR следующим образом:

from Flask import jsonify 


@app.route('/SaveFile', methods=['POST', 'GET']) 
def SaveFile(): 
    send_back = {"status": "failed"} 
    if request.method == 'POST': 
     try: 
      data = request.get_json() 
      cur.execute('INSERT INTO myrecipes(name) VALUES(?)', data["name"]) 
      db.commit() 
      send_back["status"] = "success" 
     except Error as err: 
      send_back["status"] = str(err) 
    return jsonify(send_back) 
+0

thanks @davidism Я всегда использую GET для этих вещей, но заметьте, что метод 'request.get_json()' продвигается вперед. Думал, что я удалил строку 'json.stringify' из исходного сообщения OPs – abigperson

+0

Спасибо, что очистил много мелких деталей, которые я не мог найти в Интернете. –

Смежные вопросы