一个隐蔽的jq getJson回调不执行问题

一般而言jq的getJson回调不执行除了请求本身就出错之外那肯定就是json格式本身有问题了
最近在做一个demo,使用python的flask框架进行构建,route代码如下:

>run.py
@app.route('/data/getHotWordContent')
def getHotWordContent():
    hot_word = request.args.get('hot_word')
    return api.getHotWordContent(hot_word=hot_word)

>api.py
from flask import jsonfy
 def getHotWordContent(self, hot_word='', start_date='2019-07-31', end_date='2019-08-14'):
        wf = Wordfrequency(start_date=start_date, end_date=end_date)
        json_data = []
        data = wf.findHotWordContent(hot_word=hot_word)
        for d in data:
            json_data.append({'author': d[0], 'content': d[1]})
        return jsonify({'data': json_data})

调用的js代码如下

var loadHotWordContent = function (hot_word) {
    console.log('Loading hot word information ...')
    $.getJSON({
        url: pre_url + '/data/getHotWordContent',
        data: {'hot_word': hot_word},
        function(data) {
            console.log('Json data load successfully!')
        }
    })
}

很诡异的是我在控制台的network中查看请求已经成功,而且使用的是flask本身的jsonfy工具,json肯定不会有格式问题,依然无法调用回调函数,经过一上午的研究终于发现了问题。

查找json的官方文档有

传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些无效的 JSON 字符串:
{test: 1} (test 没有使用双引号包裹).
{'test': 1} ('test' 用了单引号而不是双引号包裹).
"{test: 1}" (test 没有使用双引号包裹).
"{'test': 1}" ('test' 用了单引号而不是双引号包裹).
"'test'" ('test' 用单引号代替双引号).
".1" (number 必须以数字开头; "0.1" 将是有效的).
"undefined" (undefined 不能表示一个 JSON 字符串; 然而null,可以).
"NaN" (NaN 不能表示一个 JSON 字符串; 用Infinity直接表示无限也是不允许的).

在flask中,如果遇到None值会直接格式化成为NaN从而触发这个bug
将None值替换即可解决问题

你可能感兴趣的:(一个隐蔽的jq getJson回调不执行问题)