###JavaScript

`$.get` is asynchronous. It triggers an HTTP request and returns. The code meant to prevent submission runs after submission is processed, and therefore can't prevent it.

The `preventDefault` has to go into the `submit` handler, not the `$.get` callback, and would be called *each time you try to submit*, cancelling the submit attempt. Inside the get callback, depending on result, call the form's `submit()` method, that one submits the form without triggering the submit handlers again.

###Python

`SELECT` lets `db.execute` return a list of dicts, so `[0]` would pick first record, and `[username]` would pick the field of the name stored in variable `username`. Which is not what you want, you want to compare with values. Instead of `[0][username]`, you could do something like

    usernames = (user["username"] for user in db.execute("SELECT username FROM users"))

And you can `jsonify` a boolean expression:

    return jsonify(username in usernames)

edit: username **not** in usernames (according to [problem description](https://docs.cs50.net/2019/x/psets/8/finance/finance.html#check))

You might like `WHERE` clause in your `SELECT`. Gets so much more readable, saving you much code.