Flask(python)異步(ajax)返回json格式數據

主要討論兩個問題,第一個是關於json.dumps 與jsonify區別,第二個是幾種異步的區別(見jQuery中的$.getJSON、$.ajax、$.get、$.post的區別)。html

json.dumps()和jsonify()的區別

  • 使用方法不一樣:

dumps和loads方法,來自json模塊,而json模塊是python中的,能夠直接導入:python

import json

而jsonify是flask封裝的擴展包jquery

from flask import jsonify
  • 做用不一樣:

①dumps()和loads()ajax

json.dumps():把字典轉成json字符串,json

json.loads():把json字符串轉成字典flask

他們操做的都是變量(變量是存儲在內存中的)。bootstrap

②jsonify瀏覽器

字典轉成json字符串session

  • 效果不一樣:

①json.dumps()查看響應信息(Content-Type:響應內容的類型):Content-Type:text/heml;charset=utf-8app

②jsonify查看瀏覽器響應信息(Content-Type:響應內容的類型):Content-Type: application/json

相關代碼以下:

新建flask項目,創建一個app.py文件,代碼以下:

# coding: utf-8
from flask import Flask, render_template, url_for, request, json, jsonify
from flask_bootstrap import Bootstrap

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False


@app.route('/form_data', methods=['GET', 'POST'])
def form_data():
    if request.method=='GET':
        username = request.args.get("username")
        #dumps和loads方法,來自json模塊,而json模塊是python中的,能夠直接導入:
        #而jsonify是flask封裝的擴展包
        return jsonify({'status': '0', 'username': username, 'errmsg': '登陸成功!'})
    else:
        username = request.form['username']
        return jsonify({'status': '0', 'username': username, 'errmsg': '登陸成功!'})



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


if __name__ == '__main__':
    app.run(debug=True)

再在templates文件夾下新建test.html文件,代碼以下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action='{{ url_for('form_data') }}' method="POST">
    <input name="username" type="text"/>
    <input type="submit">

</form>
<Br>
<input type="button" name="sendjson" value="提交" id="sendjson">
<div id="myDiv"></div>
<script src="https://code.jquery.com/jquery-3.4.0.min.js"></script>
<script>
    $("#sendjson").click(function () {
        params = {"username": "lisi"}

        {#$.getJSON("{{ url_for('form_data') }}",params, function (result) {#}
        {#        $("#myDiv").append("hello world1");#}
        {#        console.log(obj.username + "<br>");#}
        {# });#}

        {#$.ajax({#}
        {#    "url": "{{ url_for('form_data') }}",#}
        {#    "type": "POST",#}
        {#    "data": params,#}
        {#    "success": function (obj) {#}
        {#        $("#myDiv").append("hello world")#}
        {#        console.log(obj.username + "<br>")#}
        {#    },#}
        {#    "error": function (obj) {#}
        {#        console.log(obj)#}
        {#    },#}
        {#    "dataType": "json",#}
        {#    "async": true#}
        {# });#}

        {#$.get("{{ url_for('form_data') }}", params, function (obj) {#}
        {#    $("#myDiv").append("hello world")#}
        {#    console.log(obj.username + "<br>");#}
        {# }, "json");#}

        $.post("{{ url_for('form_data') }}", params, function (obj) {
            $("#myDiv").append(obj.username + "<br>")
            console.log(obj);
        }, "json");
    })
    {#$('#sendjson').bind('click', submit_form);#}
</script>
</body>
</html>

 案例截圖:

 

 

返回結果:

 

 

參考:dumps與jsonify區別 ajax異步函數參考

相關文章
相關標籤/搜索