2017-11-07 3 views
1

Ich versuche, eine einfache AJAX-Anfrage von Flask behandelt werden, aber habe Probleme, die Anfrage an die richtige Adresse gesendet.Flask 404 Antwort von AJAX Anfrage

Ich bin mit diesem einfachen Weg und Funktion der app.py Datei withing zu definieren, wie eine Anfrage an URL/Hello World zu handhaben:

@app.route('/HelloWorld', methods=['GET', 'POST']) 
def HelloWorldRouted(): 
    return "Hello World!" 

Ich verwende diese jQuery-Funktion eine Anforderung an zu senden, um zu versuchen URL/Hello World:

$.ajax({ 
     type: "POST", 
     url: "/HelloWorld", 
     headers: {"Content-Type": "application/json"}, 
     success: function(response) 
     { 
      console.log('Response:\t', response) 
     } 
    }); 

Wenn ich den Flask-Server zu starten und eine Anforderung, mit meinem Browser URL senden: 5000/Hello World, kann ich die erwartete „Hallo Welt“ Meldung angezeigt wird, sowie ein Protokoll der Anfrage in der Server-Ausgabe:

"GET /HelloWorld HTTP/1.1" 200 

Allerdings, wenn ich versuche, die Anforderung über diese Webseite einreichen, erhalte ich die folgende Fehlermeldung in der Konsole:

POST URL/Hello World 404 (nicht gefunden)

Also meine Frage: Was muss ich tun, damit die App Anfragen von URL/statt URL: 5000/bearbeitet? Ich hosste die Webseite und den Server auf einer AWS EC2 Amazon Linux-Instanz, wenn das überhaupt wichtig ist.

+1

In Ihrer Route sollte es 'Methoden = ['GET', 'POST']' sein. Du hast nur das "s" vergessen – kstullich

+0

Es ist korrekt in meinem Code, ich habe mich hier vertippt. – coolhilljr

+1

https://stackoverflow.com/questions/19627195/flask-request-without-port-in-url – Zak

Antwort

0

Ich gebe ein Beispiel, um JSON-Daten zu Flask Route zu senden und die Antwort in Vorlage zu manipulieren.

app.py:

from flask import Flask, render_template, request, url_for, redirect 

app = Flask(__name__) 

@app.route('/') 
@app.route('/index') 
def show_index(): 
    return render_template("ajax_simple.html") 

@app.route('/HelloWorld', methods=['GET', 'POST']) 
def HelloWorldRouted(): 
    if request.method == "POST": 
     try: 
      username = str(request.json['username']) 
      return "Hello "+username+"!" 
     except Exception as e: 
      return "error: "+str(e) 
if __name__ == '__main__': 
    app.run(debug=True) 

ajax_simple.html Vorlage enthält eine jquery CDN:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
    <meta name="author" content="Ahmedur Rahman Shovon"> 
    <title>Ajax Example</title> 
</head> 
<body> 
    <div id="result"></div> 
<!-- jQuery --> 
<script 
    src="https://code.jquery.com/jquery-1.12.4.min.js" 
    integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" 
    crossorigin="anonymous"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    user_data = JSON.stringify({"username": "shovon"}); 
    console.log(user_data); 
    $.ajax({ 
     type: "POST", 
     url: "/HelloWorld", 
     data: user_data, 
     headers: {"Content-Type": "application/json"}, 
     success: function(response) 
     { 
      $("#result").html(response); 
     }, 
     error: function(response) 
     { 
      console.log(response); 
     }   
    }); 
}) 
</script> 

</body> 
</html> 

Ausgang:

enter image description here

N. B .: Ich weiß nicht, über Ihre Cloud-Konfiguration. Dies wird in einer lokalen Umgebung getestet und sollte auch in AWS ausgeführt werden.