Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

reload page after processing javascript output in flask

I have a javascript snipped which uses ajax to send an email address to my flask views.py script. I want to send a message to that address if the email is not in my database or otherwise reload the website and show the user information for that email address. Here is my javascript code which sends the data to my views.py

<script type='text/javascript'>
    $(".send_invite_message").click(function(evt) {

        var Toemail = document.getElementById('To').value
        $.ajax({
            url: "/send_invitation_member",
            type: "GET",
            async: true,
            cache: false,
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            data: { email: Toemail}, 
            success: function(data) {
                ///do something
            },
        });
    });
</script>

and in flask I would like to now have the option to send an email and if the email already exists in the database to reload the site

@app.route('/send_invitation_member', methods=['GET'])
def send_invitation_member():

    if request.method == 'GET':
        email = request.args.get('email')

        search_result = check database for email entry
        if search_result:
            return render_template('show_members.html')
        else:
            send message and return json object

However the ajax script expects a json object back, so I don't know how to reload the site and show the user information. Is there any way to do this directly in flask or do I need to extend my javascript code and load the site from there? thanks carl

like image 213
carl Avatar asked Oct 19 '22 03:10

carl


1 Answers

Since there's no way for an AJAX response to directly affect the page that's calling it, you'll need to extend your javascript a little (but only a bit).

In your success function, let's add the following:

success: function(data) {
    if (data['url'] != null) document.location = data['url'];
    else console.log('Got a valid JSON response, but no URL!');
}

This code will redirect the page to where the JSON specifies with its 'url' key. Now all that's left is to add it to our Flask code.

@app.route('/show_members')
def show_members():
    return render_template('show_members.html')

@app.route('/somewhere_else')
def some_other_route():
    return "It all works!"

@app.route('/send_invitation_member', methods=['GET'])
def send_invitation_member():

        email = request.args.get('email')
        search_result = check database for email entry

        if search_result:
            destination = url_for('.show_members')
        else:
            destination = url_for('.some_other_route')
            send message and return json object

        return Response(response=json.dumps({'url': destination}, mimetype='text/json')

I find when using flask it's better to separate your routes out into different functions depending on the HTTP method. And the url_for method? It's a life saver. You can find its docs here http://flask.pocoo.org/docs/0.10/api/#flask.url_for

like image 135
pmccallum Avatar answered Oct 22 '22 03:10

pmccallum