Estoy creando una aplicación web para ayudar a las personas discapacitadas a navegar por Internet. Toma el comando de voz a través de un JavaScript y envía el comando a la aplicación Python app.py Flask. Sin embargo, por extraño que parezca, no está redirigiendo de ninguna manera y me da un error de servidor interno 500.
Esta es la función de JavaScript que envía el comando:
// This function sends command to python function sendCommand(command){ let userCommand = { "command": command } $.ajax({ type: "POST", url: "/command", data: JSON.stringify(userCommand), contentType: "application/JSON", dataType: 'json', success: function(){ window.location.href = "temp.html"; } }) }Y esta es la aplicación del matraz de Python:
# Importing required libraries and functions from flask import Flask, render_template, request, redirect import speech_recognition as sr import sys # Initiating Flask app = Flask(__name__) # Command Global variable COMMAND = "" # Route to Command (Index) page @app.route("/", methods=["GET", "POST"]) def index(): return render_template("index.html") # Processing Command @app.route('/command', methods=["POST"]) def get_javascript_data(): if request.method == "POST": JSONdict = request.get_json() COMMAND = JSONdict["command"] print(f'{COMMAND}', file=sys.stdout) if "search" in COMMAND: print("TODOSearch") elif ("music" and "play") in COMMAND: print("TODO") else: print("TODO") return redirect("/redirect") @app.route("/redirect") def redirect(): return render_template("redirect.html")¿Cuál es mi culpa aquí?
No podrá redirigir desde el matraz en una solicitud POST. En su lugar, use return 200
Entonces debería activarse la función de éxito en su solicitud de Ajax.
Si necesita más flexibilidad, también puede devolver datos json a la función "éxito" o "error". return json.dumps({'success' : True}), 200, {'ContentType' : 'application/json'}