一个隐蔽的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值替换即可解决问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • JS基础 页面由三部分组成:html:超文本标记语言,负责页面结构css:层叠样式表,负责页面样式js:轻量级的脚...
    小贤笔记阅读 622评论 0 5
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,313评论 0 3
  • JavaScript语言精粹 前言 约定:=> 表示参考相关文章或书籍; JS是JavaScript的缩写。 本书...
    微笑的AK47阅读 591评论 0 3
  • Comment your JavaScript Code JavaScript中的注释方式有以下两种: 使用 //...
    归云丶阅读 1,140评论 0 0