简体   繁体   中英

How to get data from server by using JSON, JQuery and AJAX?

I am newer on developing flask-python based applications and got stuck in some point. The problem is that I cannot retrieve data from mysql.

First of all, let me share my some files' contents, at least some parts of them. For html, I am using bootstrap.

index.html:

<!DOCTYPE html>
<html lang="en">
  <head>

    <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet">

    <link href="http://getbootstrap.com/examples/jumbotron-narrow/jumbotron-narrow.css" rel="stylesheet">

    <link rel="stylesheet" type="text/css" href="../static/css/search-bar.css">

    <script type=text/javascript src="{{ url_for('static', filename='js/jquery-1.11.2.js') }}"></script>
    <script type=text/javascript src="{{ url_for('static', filename='js/wordQuery.js') }}"></script>  

  </head>

  <body>
  <div class="jumbotron">
    <h1>Search</h1>
    <div class="container">
      <div class="row">
        <div id="custom-search-input">
            <div class="input-group col-md-12">
              <input type="text" id="wordInput" class="form-control input-lg" placeholder="Please type the word you want to search" />
              <span class="input-group-btn">
                  <button class="btn btn-info btn-lg" type="button" id="btnWordSearch">
                      <i class="glyphicon glyphicon-search"></i>
                  </button>
              </span>
            </div>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

app.py:

from flask import Flask, render_template, json, jsonify, request
from flaskext.mysql import MySQL
from werkzeug import generate_password_hash, check_password_hash

mysql = MySQL()
app = Flask(__name__)

# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'USER_NAME'
app.config['MYSQL_DATABASE_PASSWORD'] = 'PASSWORD'
app.config['MYSQL_DATABASE_DB'] = 'DATABASE_NAME'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


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

@app.route('/wordQuery', methods=['POST', 'GET'])
def checkWord():
    word = request.form['wordInput']
    success = "OK"
    error = "NOK"
    word = word.lower()
    try:
        with connection.cursor() as cursor:
            # Read a single record
            sql = "SELECT `word` FROM `allwords` \
                    WHERE `word` like %s"
            cursor.execute(sql, (word + "%",))
            result = cursor.fetchone()
            if result is not None:
                return json.dumps({'message': 'The word exists in the database !'})
            else:
                return json.dumps({'error': str(data[0])})
    except Exception as e:
        return json.dumps({'error': str(e)})
    finally:
        cursor.close()
        conn.close()

if __name__ == "__main__":
    app.run(debug=True, port=5005)

wordQuery.js:

$(function(){
    $('#btnWordSearch').click(function(){

        $.ajax({
            url: '/wordQuery',
            data: $('form').serialize(),
            type: 'POST',
            success: function(response){
                console.log(response);
            },
            error: function(error){
                console.log(error);
            }
        });
    });
});

I want to see that when a word is searched, it should be found on the database and browser console should write the message 'The word exists in the database !'. Later, I want to implement another html page which gives results.

Thank you in advance for your help!

UPDATE:

I was getting the below error when I first posted this problem here;

jquery-1.11.2.js:9659 POST 127.0.0.1:5005/wordQuery 400 (BAD REQUEST)

However, now I changed a part in my html file. There was an id element like this: id="wordInput" and I changed it like this: name="wordInput" . After this change, I am getting a new error like this following;

jquery-1.11.2.js:9659 POST http://127.0.0.1:5005/wordQuery 500 (INTERNAL SERVER ERROR)

I don't see a form element in your HTML. You're probably POST ing empty data

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM